Azure上的虚拟应用程序在一夜之间具有RoleEnvironment.IsAvailable == false

时间:2013-06-25 09:18:20

标签: azure connection-string webrole

我在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 Web应用程序和虚拟目录中的BackOffice MVC 3 Web应用程序(VirtualApplication)。

几周前我已经升级到SDK 2.0,但仍然使用StorageClient 1.7,因为有一些重大变化。暂时一切都还可以。

上个星期一,突然(我检查并仔细检查了源代码控制以确保没有人更改配置),BackOffice停止工作,因为“msshrtmi.dll”1.7文件丢失了。我认为它曾经在GAC中(在我自己的机器上)但在Azure主机上实际上没有(只有2.0存在)。我在我的Web应用程序引用中添加了DLL,它运行良好。

但是现在......同样的Web应用程序抱怨它无法连接到SQL Server,因为connectionString是错误的。难怪,当它应该查看Azure ServiceConfiguration时,它会查看web.config。我们有一个connectionString提供程序,它检查RoleEnvironment.IsAvailable是否返回true,在这种情况下,它将从ServiceConfiguration获取connectionString。对于BackOffice,它现在返回false。 FrontOffice的一切正常。

有没有人知道上周末是否对Azure进行了一些更改,可以解释这种突然的行为?

1 个答案:

答案 0 :(得分:2)

我终于明白发生了什么。

当我升级到Azure SDK 2.0时,它仅更新了Azure Web角色项目,而不更新了仍在引用SDK 1.7 DLL的Web应用程序项目。

但是没有人注意到它并且它已经工作了一段时间。 Lukos可能是正确的:Microsoft对其VM进行了一些更改,而GAC现在只包含2.0的DLL(因为我的部署目标是2.0)。

我对我的网络应用程序进行了必要的更改(切换DLL),现在一切都很好。