Follow Me Widget

воскресенье, 18 сентября 2011 г.

Разворачивание ASP.NET MVC 3 приложения в Windows Azure.

В последнем апдейте Windows Azure Tools for Visual Studio была добавлена очень полезная и часто используемая фишка – это темплейт веб роли на основе ASP.NET MVC 3. Сегодня я продемонстрирую как быстро и беспроблемно развернуть такое решение в облаке.
Итак, для начала необходимо создать облачное решение и добавить к нему ASP.NET MVC 3 веб роль.


ASP.NET MVC 3 Web Role
После создания проекта все необходимые ASP.NET MVC 3 сборки будут автоматически добавлены и готовы к использованию. После этого проект теоретически уже готов к запуску в облаке, но к нашему разочарованию после успешного разворачивания мы получим исключение во время запуска приложения.

ASP.NET MVC 3 Error

После обновления Web.config файла и добавления следующей секции <customErrors mode="Off" /> мы получим подробное описание ошибки.

ASP.NET MVC 3 Error Description

После непродолжительного поиска причина возникновения проблемы была найдена. Как оказалось новый шаблон по умолчанию поставляется с установленными универсальными провайдерами (для знакомства с ними можно почитать прекрасный пост Скота Хансельмана). Ошибка возникла по причине того, что установленный по умолчанию сессионный провайдер хранит данные сессий в реляционной базе данных.
<sessionState mode="Custom" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider"
         type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
         connectionStringName="DefaultConnection"
         applicationName="/" />
  </providers>
</sessionState>

Ок, проблема найдена. Вопрос как решить ее ? Простейшим вариантом является конечно же отключение сессии, но мы пойдем по несколько иному пути. А именно создадим новую базу данных на основе SQL Azure и “натравим” на нее наш сессионный провайдер. Процесс создания БД относительно прост :
  • На dev-портале выбираем раздел Database и создаем новую базу данных (я назвал ее Universal Providers)Create New SQL Azure DB
  • Выбрать только что созданную базу данных и нажать кнопку View для просмотра/копирования строки соединения.

SQL Azure Connection Strings

  • Обновить строки соединения нашего приложения
<connectionStrings>
  <add name="ApplicationServices"
       connectionString="Server=tcp:YOURDB.database.windows.net,1433;Database=UniversalProviders;User ID=YOURLOGIN@YOURDB;Password=YOURPWD;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;"
       providerName="System.Data.SqlClient" />
  <add name="DefaultConnection"
       connectionString="Server=tcp:YOURDB.database.windows.net,1433;Database=UniversalProviders;User ID=YOURLOGIN@YOURDB;Password=YOURPWD;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;"
       providerName="System.Data.SqlClient" />
</connectionStrings>
  • Развернуть обновленное приложение в облаке

Теперь, как только мы запустим приложение ошибка с недоступностью SQL-сервера исчезнет и мы увидим стартовую страницу ASP.NET MVC 3.

ASP.NET MVC 3 Template

При помощи Web-интерфейса можно просмотреть  созданные в базе данных таблицы.

Universal Session Provider in Azure

В принципе это была единственная проблема, с которой я столкнулся при разворачивании ASP.NET MVC 3 приложения в Windows Azure. Отписывайтесь в комментариях сталкивался ли кто с другими проблемами и как они решались :).

Комментариев нет: