В последнем апдейте Windows Azure Tools for Visual Studio была добавлена очень полезная и часто используемая фишка – это темплейт веб роли на основе ASP.NET MVC 3. Сегодня я продемонстрирую как быстро и беспроблемно развернуть такое решение в облаке.
Итак, для начала необходимо создать облачное решение и добавить к нему ASP.NET MVC 3 веб роль.
После создания проекта все необходимые ASP.NET MVC 3 сборки будут автоматически добавлены и готовы к использованию. После этого проект теоретически уже готов к запуску в облаке, но к нашему разочарованию после успешного разворачивания мы получим исключение во время запуска приложения.
После обновления Web.config файла и добавления следующей секции <customErrors mode="Off" /> мы получим подробное описание ошибки.
После непродолжительного поиска причина возникновения проблемы была найдена. Как оказалось новый шаблон по умолчанию поставляется с установленными универсальными провайдерами (для знакомства с ними можно почитать прекрасный пост Скота Хансельмана). Ошибка возникла по причине того, что установленный по умолчанию сессионный провайдер хранит данные сессий в реляционной базе данных.
Ок, проблема найдена. Вопрос как решить ее ? Простейшим вариантом является конечно же отключение сессии, но мы пойдем по несколько иному пути. А именно создадим новую базу данных на основе SQL Azure и “натравим” на нее наш сессионный провайдер. Процесс создания БД относительно прост :
Теперь, как только мы запустим приложение ошибка с недоступностью SQL-сервера исчезнет и мы увидим стартовую страницу ASP.NET MVC 3.
При помощи Web-интерфейса можно просмотреть созданные в базе данных таблицы.
В принципе это была единственная проблема, с которой я столкнулся при разворачивании ASP.NET MVC 3 приложения в Windows Azure. Отписывайтесь в комментариях сталкивался ли кто с другими проблемами и как они решались :).
Итак, для начала необходимо создать облачное решение и добавить к нему ASP.NET MVC 3 веб роль.
После создания проекта все необходимые ASP.NET MVC 3 сборки будут автоматически добавлены и готовы к использованию. После этого проект теоретически уже готов к запуску в облаке, но к нашему разочарованию после успешного разворачивания мы получим исключение во время запуска приложения.
После обновления Web.config файла и добавления следующей секции <customErrors mode="Off" /> мы получим подробное описание ошибки.
После непродолжительного поиска причина возникновения проблемы была найдена. Как оказалось новый шаблон по умолчанию поставляется с установленными универсальными провайдерами (для знакомства с ними можно почитать прекрасный пост Скота Хансельмана). Ошибка возникла по причине того, что установленный по умолчанию сессионный провайдер хранит данные сессий в реляционной базе данных.
<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)
- Выбрать только что созданную базу данных и нажать кнопку View для просмотра/копирования строки соединения.
- Обновить строки соединения нашего приложения
<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.
При помощи Web-интерфейса можно просмотреть созданные в базе данных таблицы.
В принципе это была единственная проблема, с которой я столкнулся при разворачивании ASP.NET MVC 3 приложения в Windows Azure. Отписывайтесь в комментариях сталкивался ли кто с другими проблемами и как они решались :).
Комментариев нет:
Отправить комментарий