Виртуальное приложение в Azure имеет RoleEnvironment.IsAvailable == false в одночасье
У меня есть следующая конфигурация в моем развертывании веб-роли Azure:
<WebRole name="FrontOffice" vmsize="Small">
<Sites>
<Site name="Web">
<VirtualApplication name="mag_admin" physicalDirectory="../../Sites/BackOffice" />
<Bindings>
<Binding name="EndpointFrontOffice" endpointName="EndpointFrontOffice" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="EndpointFrontOffice" protocol="http" port="80" />
</Endpoints>
Это веб-приложение FrontOffice MVC 3 и веб-приложение BackOffice MVC 3 в виртуальном каталоге (VirtualApplication).
Я обновился до SDK 2.0 пару недель назад, но остался на StorageClient 1.7, так как произошли серьезные изменения. Некоторое время все было в порядке.
В прошлый понедельник, совершенно неожиданно (и я проверил и дважды проверил управление исходным кодом, чтобы убедиться, что никто не изменил конфигурацию), BackOffice перестал работать, потому что отсутствовал файл "msshrtmi.dll" 1.7. Я думаю, что раньше он был в GAC (на моей собственной машине), но фактически отсутствовал на хосте Azure (присутствовал только 2.0). Я добавил DLL в ссылки на веб-приложения, и это сработало.
Но теперь... это же веб-приложение жалуется, что не может подключиться к SQL Server, потому что строка соединения неверна. Неудивительно, что он просматривает файл web.config, когда ему следует изучить конфигурацию службы Azure. У нас есть провайдер connectionString, который проверяет, возвращает ли RoleEnvironment.IsAvailable значение true, и в этом случае он получит connectionString из ServiceConfiguration. А для BackOffice теперь он возвращает false. Все отлично работает для FrontOffice.
Кто-нибудь знает, были ли внесены какие-либо изменения в Azure в прошлые выходные, которые могли бы объяснить это внезапное поведение?
1 ответ
Я наконец понимаю, что случилось.
Когда я обновил до Azure SDK 2.0, он обновил только проект веб-роли Azure, а не проекты веб-приложений, которые все еще ссылались на библиотеки DLL SDK 1.7.
Но никто не заметил, и это работало некоторое время. Лукос, вероятно, прав: Microsoft внесла некоторые изменения в свои виртуальные машины, и теперь GAC содержит только библиотеки DLL для 2.0 (поскольку мое развертывание нацелено на 2.0).
Я сделал необходимые изменения в своих веб-приложениях (переключив DLL), и теперь все в порядке.