Виртуальное приложение в 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), и теперь все в порядке.

Другие вопросы по тегам