Можно ли получить доступ к web.config из точки входа моей веб-роли Azure? - PullRequest
4 голосов
/ 27 сентября 2011

У меня есть веб-роль Azure, и я хочу сохранить некоторые настройки в web.config под тегом <appSettings>.Да, я знаю о файлах конфигурации службы, но у меня есть причины предпочесть web.config.

Когда я выполняю (с здесь ):

System.Configuration.Configuration rootWebConfig =
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
if (rootWebConfig1.AppSettings.Settings.Count > 0) {
}

счетчик настроек всегда равен нулю, хотя я добавил пару ключ-значение в <appSettings>.

Что я делаю не так?Можно ли прочитать настройки из web.config из точки входа в веб-роль?

Ответы [ 2 ]

12 голосов
/ 16 октября 2012

Причина этого заключается в том, что Microsoft представила возможность полного IIS начиная с Azure SDK 1.3. Побочным эффектом этого является то, что RoleEntryPoint отключен от остальной части веб-приложения.

Следующая выдержка из сообщения Microsoft в блоге описывает то, что вы видите.

... с полным IIS RoleEntryPoint работает под WaIISHost.exe , а веб-сайт работает под обычным процессом IIS w3wp.exe .

... поэтому он ожидает, что его конфигурация находится в файле с именем WaIISHost.exe.config . Поэтому, если вы создадите файл с этим именем в своем веб-проекте и установите для свойства «Копировать в выходной каталог» значение «Копировать всегда», вы обнаружите, что RoleEntryPoint может с радостью прочитать это.

Помимо упомянутого решения, можно попробовать использовать режим Hosted Web Core (HWC) вместо режима полного IIS.


Обновление - изменения, внесенные в Azure SDK 1.8

  • Azure SDK 1.3 -1.7 будет выглядеть в WaIISHost.exe.config

  • Azure SDK 1.8+ будет выглядеть в WebRoleProjectName.dll.config .

С последним изменением в SDK вы сможете разместить app.config в своем проекте, и точка входа вашей роли должна иметь к нему доступ.

0 голосов
/ 27 сентября 2011

Где ваш web.config и где код, который вы выполняете?

Если это метод OnStart() подкласса RoleEntryPoint, вы увидите записи вweb.config в корне того же проекта - обычно это сам проект веб-развертывания, а не ваш веб-сайт.Это позволяет Azure поддерживать несколько веб-сайтов под одной ролью веб-развертывания.

...