1

我有一个现有的解决方案,它在 WebRole.OnStart 和 Global.asax Application_Start 处理程序中使用来自 RoleEnviroment 的设置。(这几个月来一直运行良好)

当我的角色中只有一个站点时,这一切都很好:

<WebRole name="WebRole" vmsize="ExtraSmall">
    <Runtime executionContext="elevated" />
    <Sites>
      <Site name="Web1" physicalDirectory="..\..\..\Web1\">
        <Bindings>
          <Binding name="HTTP" endpointName="Public HTTP" hostHeader="web1.com" />
        </Bindings>
      </Site>
    </Sites>

但是,当我添加第二个站点时,两个站点都无法访问 RoleEnviroment??

<WebRole name="WebRole" vmsize="ExtraSmall">
    <Runtime executionContext="elevated" />
    <Sites>
      <Site name="Web1" physicalDirectory="..\..\..\Web1\">
        <Bindings>
          <Binding name="HTTP" endpointName="Public HTTP" hostHeader="web1.com" />
        </Bindings>
      </Site>
      <Site name="Web2" physicalDirectory="..\..\..\Web2\">
        <Bindings>
          <Binding name="HTTP" endpointName="Public HTTP" hostHeader="web2.com" />
        </Bindings>
      </Site>
    </Sites>

我已经在本地 azure 模拟器(完整)中对此进行了测试,它工作正常,但是当部署到实际的 Web 角色时,它会抛出:

[SEHException (0x80004005): External component has thrown an exception.]
   RdGetApplicationConfigurationSetting(UInt16* , UInt16** ) +0
   RoleEnvironmentGetConfigurationSettingValueW(UInt16* pszName, UInt16* pszDest, UInt64 cchDest, UInt64* pcchRequiredDestSize) +73
   Microsoft.WindowsAzure.ServiceRuntime.Internal.InteropRoleManager.GetConfigurationSetting(String name, String& ret) +133
   Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue(String configurationSettingName) +109
   Web1.Installer.Install(IWindsorContainer container, IConfigurationStore store) in c:\projects\Webs\Web1\Installer.cs:21

我已检查我要访问的设置是否存在。当我删除第二个站点时,它工作正常。当我删除第一个站点时,它也可以正常工作。在我看来,Azure 在多个实例中为 Web 角色提供对 RoleEnviroment 的访问存在问题。

4

1 回答 1

0

好的,所以在这个工作了将近 2 天之后。问题是项目中的 Azure SDK 版本程序集不匹配。

较旧的站点具有 Azure SDK 2.4,并且由于某种原因较新的站点具有 SDK 2.3,这意味着当部署了两个站点(两个版本的程序集)时无法找到 RoleEnvironment。

我认为这是因为他们以不同的方式寻找 RoleEnvironment,或者在访问它的方式上存在冲突。

我读过这可能与可能导致 RoleEnvironment 为 IsAvailable = false 的“Rd”环境变量有关。

各位:如果遇到此问题,请检查您的 Azure SDK 程序集版本是否同步!

于 2014-09-03T19:45:07.390 回答