我有一个现有的解决方案,它在 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/