我在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进行了一些更改,可以解释这种突然的行为?
答案 0 :(得分:2)
我终于明白发生了什么。
当我升级到Azure SDK 2.0时,它仅更新了Azure Web角色项目,而不更新了仍在引用SDK 1.7 DLL的Web应用程序项目。
但是没有人注意到它并且它已经工作了一段时间。 Lukos可能是正确的:Microsoft对其VM进行了一些更改,而GAC现在只包含2.0的DLL(因为我的部署目标是2.0)。
我对我的网络应用程序进行了必要的更改(切换DLL),现在一切都很好。