1

我的 Azure Web 角色部署中有以下配置:

<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 进行了一些更改来解释这种突然的行为?

4

1 回答 1

2

我终于明白发生了什么。

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

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

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

于 2013-06-25T17:25:10.407 回答