azure - 在 Cloud Service 内运行多个站点时无法访问 RoleEnviroment

标签 azure azure-web-roles azure-cloud-services azure-role-environment

我有一个现有的解决方案,它在 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 访问权限时存在问题。

最佳答案

好的,经过近 2 天的努力。事实证明,问题是项目上的 Azure SDK 版本程序集不匹配。

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

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

我了解到这可能与“Rd”环境变量有关,该变量可能导致 RoleEnvironment 为 IsAvailable = false。

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

关于azure - 在 Cloud Service 内运行多个站点时无法访问 RoleEnviroment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25625023/

相关文章:

c# - 在global.asax Application_Start中缓存大量数据,windows azure角色

c# - 对使用 Azure 云服务的代码进行单元测试

随用随付订阅的 Azure 云服务部署问题 - 此订阅中不提供云服务

azure - 请求下层服务失败

azure - 在自定义政策中更改 azure ad b2c 的背景图像

c# - Azure Web 应用程序中未找到 Win32 DLL 错误

azure - 如何解决sp2013中的混合搜索抓取错误?

asp.net-mvc - 是否可以在 Azure 上部署 WebRole,并使用 Cloud Numerics 进行计算?

azure - 是否可以使用 DotTrace 远程分析 Azure 网站?

Azure 云服务与现有 ccproj 配置文件持续集成