Visual studio 2012 – как сделать package web сайта

Если в Visual Studio 2010 для этого был пункт в контекстном меню "Build Deployment Package", то в Visual Studio 2012 это нет.
Для того чтобы упаковать свой сайт и подготовить его к публикации нужно:
1. Нажать правкой кнопкой мыши на проекте и выбрать Publish.
2. В появившемся окне создать новый профиль для вашего пакета.
3. Во втором пункте "Connection" выбрать "Web Deploy Package" и указать папку куда будет сохранен сформированный пакет.
4.  Дальше выбрать конфигурацию и нажать Publish.
5. Ну и собственно все :)

Дата центры и размеры виртуальных машин в Azure

Виртуальные машины:

Размер Процессор Память Локальное хранилище
Extra Small         1.0 ГГц     768 Мбайт       20 Гбайт
Small      1.6 ГГц 1.75 Гбайт   225 Гбайт
Medium 2 х 1.6 ГГц   3.5 Гбайт   490 Гбайт
Large 4 х 1.6 ГГц      7 Гбайт 1000 Гбайт
Extra Large 8 х 1.6 ГГц    14 Гбайт 2040 Гбайт

Регионы дата центров:
West US
East US
East Asia
Southeast Asia
North Europe
West Europe

Тест производительности SQL Azure vs SQL Server vs Table Storage

В процессе подбора оптимального хранилища я прочитал много статей в которых говорилось что SQL Azure работает значительно медленнее чем Table Storage и медленнее чем SQL Server. Но никаких цифр я не нашёл, по этому решил все таки проверить с какой скоростью на самом деле работают SQL Azure и Table Storage, и для сравнения я взял SQL Server 2008 R2 Express.
Результаты оказались достаточно интересные, для теста я взял простой класс, для Table Storage:

public class lTEST : TableServiceEntity
{
public lTEST()
: base()
{
}
public lTEST(string partitionKey, string rowKey)
: base(partitionKey, rowKey)
{
}
public int TEST0 { get; set; }
public string TEST1 { get; set; }
public string TEST2 { get; set; }
public string TEST3 { get; set; }
public string TEST4 { get; set; }
public double TEST5 { get; set; }
public DateTime TEST6 { get; set; }
public int TEST7 { get; set; }
public double TEST8 { get; set; }
public bool TEST9 { get; set; }
public string TEST10 { get; set; }
}


А для SQL:

create table sqlTEST
(
TEST0 int IDENTITY(1,1) NOT NULL PRIMARY KEY,
TEST1 nvarchar(400),
TEST2 nvarchar(400),
TEST3 ntext,
TEST4 ntext,
TEST5 decimal,
TEST6 datetime,
TEST7 int,
TEST8 decimal,
TEST9 bit,
TEST10 ntext,
)

 

Заполнение для Table:

for (int i = 0; i < 1000; i++)
{
lTEST ltestItem = new lTEST("testpk",i.ToString());
ltestItem.TEST0 = 0;
ltestItem.TEST1 = new string('A', 100);
ltestItem.TEST2 = new string('B', 100);
ltestItem.TEST3 = new string('C', 100);
ltestItem.TEST4 = new string('D', 100);
ltestItem.TEST5 = 50;
ltestItem.TEST6 = System.DateTime.Now;
ltestItem.TEST7 = 50;
ltestItem.TEST8 = 432.32;
ltestItem.TEST9 = true;
ltestItem.TEST10 = new string('D', 100);
TableHelper.InsertEntity("test", ltestItem);
}

 

Для SQL:
 

for (int i = 0; i < 1000; i++)
{
SqlTEST ltestItem = new SqlTEST();
// ltestItem.TEST0 = 0;
ltestItem.TEST1 = new string('A', 100);
ltestItem.TEST2 = new string('B', 100);
ltestItem.TEST3 = new string('C', 100);
ltestItem.TEST4 = new string('D', 100);
ltestItem.TEST5 = 50;
ltestItem.TEST6 = System.DateTime.Now;
ltestItem.TEST7 = 50;
ltestItem.TEST8 = 432.32;
ltestItem.TEST9 = true;
ltestItem.TEST10 = new string('D', 100);
sem.Add(ltestItem);
}
sem.SaveChanges();


 

Стоит сказать что для доступа к базам я использую Telerik Open Access.
Тестировал я таким образом, поочередно в цикле for добавлял записи в Table Storage, SQL Azure и SQL Server.
После создание всех записей, я их вычитывал из хранилищ.
По заверении, я удалял все записи из баз данных.
По чему у SQL серверов по 2 записи времени? В первой записи я делаю SaveChanges() сразу после добавления элемента, во втором – после выхода из цикла. Для 10000 я делаю сохранение данных в SQL каждые 1000 элементов, иначе сервер закрывает подключение из за превышение интервала ожидания. Все это я делал в одном потоке, поочередно.


Перейдем к результатам:

Хранилище

Кол-во записей

Время записи

Время чтения

Время удаления

Table Storage

10

    963 ms.

 1 871 ms.

 

SQL Azure

10

  3 205 ms.

   252 ms.

   367 ms.

SQL Server 2008 R2 Express

10

  1 082 ms.

   402 ms.

   167 ms.

 

 

 

 

 

Table Storage

100

  5 619 ms.

 2 564 ms.

 

SQL Azure

100

 37 479 ms.

  9 138 ms.

 4 531 ms.

 2 312 ms.

SQL Server 2008 R2 Express

100

 10 295 ms.

  5 286 ms.

   573 ms.

   569 ms.

 

 

 

 

 

Table Storage

1000

 65 177 ms.

 9 718 ms.

 

SQL Azure

1000

274 685 ms.

109 021 ms.

10 233 ms.

11 649 ms.

SQL Server 2008 R2 Express

1000

105 843 ms.

 56 938 ms.

 1 528 ms.

 4 114 ms.

 

 

 

 

 

Table Storage

10000

576 184 ms.

46 790 ms.

 

SQL Azure

10000

951 458 ms.

44 058 ms.

 

SQL Server 2008 R2 Express

10000

551 167 ms.

 9 333 ms.

 

 

 

 

 

 

Итого:

 

 

 

 

Table Storage

В среднем

  58,32 ms.

  5.49 ms.

 

SQL Azure

В среднем

  96,02 ms.

  5.31 ms.

 

SQL Server 2008 R2 Express

В среднем

  55,30 ms.

  1.06 ms.

 

Таким образом понятно что Table Storage работает явно быстрее чем SQL Azure. Но Sql Server 2008 R2 Express - быстрее всех.

Настройка эмулятора хранилища Azure local Storage

Как настроить работу локального эмулятора хранилища в Azure?
Для работы этого хранилища нужен SQL сервер, локальный или какой-то внешний, но поддерживающий Windows авторизацию (т.к. я не понял где можно ввести логин и пароль для подключения)
В общем нужно запу��тить Windows Azure Command Prompt и выполнить команду:


В случае когда у вас локально стоит SQL сервер:
DSInit /sqlInstance: <ИМЯ ВАШЕГО ИНСТАНСА> 
Например: DSInit /sqlInstance:SQLEXPRESS

А если сервер удаленный:
DSInit /server:<ИМЯ ВАШЕГО СЕРВЕРА> 
Например: DSInit /server:192.168.1.1


Или:
DSInit /server:<ИМЯ ВАШЕГО СЕРВЕРА> \<ИМЯ ИНСТАНСА>
Например: DSInit /server:192.168.1.1\MSSQL

А для того чтобы использовать в своем проекта локальное хранилище надо модифицировать строку подключения таким образом:
Сначала в web.config или app.config:

<connectionStrings>
<add name="Storage" connectionString="usedevelopmentstorage=true" />
</connectionStrings>

И в коде:

string storageConnectionString = ConfigurationManager.ConnectionStrings["Storage"].ConnectionString;
BlobHelper helper = new BlobHelper(storageConnectionString);

 

Авторизация Facebook, Google, OpenID в своем ASP.NET MVC проекте с помощю DotNetOpenAuth, OpenID, OAuth,

В один прекрасный момент вам понадобиться подключить авторизацию с социальных сетей, и сейчас я расскажу как это сделать.

Для начала нам надо подключить в свой проект через NuGet  сборку DotNetOpenAuth.AspNet с ее зависимостями.

В общем нам понадобиться:
DotNetOpenAuth.AspNet
DotNetOpenAuth.Core
DotNetOpenAuth.OAuth
DotNetOpenAuth.OAuth.Consumer
DotNetOpenAuth.OpenId
DotNetOpenAuth.OpenId.RelyingParty
Microsoft.Web.WebPages.OAuth
System.Transactions

Лучше использовать стандартный проект MVC 4 для основы.