Могу ли я получить доступ к сети.конфигурация из точки входа веб-роли Azure?
У меня есть веб-роль Azure, и я хочу сохранить некоторые параметры в web.config под тегом <appSettings>
. Да, я знаю о файлах конфигурации служб, но у меня есть причины предпочесть web.конфиг.
Когда я выполняю (из здесь):
System.Configuration.Configuration rootWebConfig =
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
if (rootWebConfig1.AppSettings.Settings.Count > 0) {
}
Количество настроек всегда равно нулю, хотя я добавил пару ключ-значение под <appSettings>
.
Что я делаю не так? Можно ли читать настройки из интернета.настройка из внутренней точки входа веб-роли?
2 ответа:
Причина этого заключается в том, что Microsoft представила полную возможность IIS начиная с Azure SDK 1.3. Побочным эффектом этого является то, что RoleEntryPoint отделяется от остальной части веб-приложения.
Следующий отрывок из блога Microsofts описывает то, что вы видите....с полным IIS, RoleEntryPoint работает под WaIISHost.exe , в то время как веб-сайт работает под обычным IIS w3wp.exe процесс.
... так что он ожидает его конфигурация должна быть в файле под названием WaIISHost.exe.config . Поэтому, если вы создадите файл с этим именем в своем веб-проекте и установите свойство " копировать в выходной каталог "в" копировать всегда", вы обнаружите, что RoleEntryPoint может читать это с удовольствием.
Помимо упомянутого решения, можно попробовать использовать режим размещенного веб-ядра (HWC) вместо полного режима IIS.
Обновление-изменения, внесенные в пакет SDK Azure 1.8
Azure SDK 1.3 -1.7 будет выглядеть в WaIISHost.exe.конфиг
Azure SDK 1.8+ будет выглядеть в WebRoleProjectName.файл DLL.config .
С последним изменением в SDK вы сможете разместить приложение .config в вашем проекте и ваша точка входа роли должны иметь доступ к нему.
Где ваш
web.config
, и где код, который вы выполняете?Если он находится в методе
OnStart()
подклассаRoleEntryPoint
, вы увидите записи вweb.config
в корне того же проекта - как правило, это сам проект Web deploy, а не ваш веб-сайт. Это позволяет Azure поддерживать несколько веб-сайтов в рамках одной роли веб-развертывания.