У меня есть существующее решение, которое использует настройки из RoleEnviroment как в обработчиках WebRole.OnStart, так и в Global.asax Application_Start. (Это работает хорошо в течение нескольких месяцев)
Все это отлично работает, когда у меня есть только один сайт внутри моей роли:
<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 (полном), и он отлично работает, но при развертывании в реальной веб-роли он выдает:
[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, предоставляющей доступ к RoleEnviroment для веб-ролей в нескольких экземплярах.