#web-config #appsettings
#web-config #appsettings
Вопрос:
У нас есть набор служб WCF, размещенных в IIS. В нашей архитектуре у нас есть разные экземпляры службы, которые различаются по конфигурации, размещенные в подкаталогах под корнем.
У меня есть Web.Config в корне, который содержит некоторую информацию о конфигурации в разделе AppSettings. В частности, это выглядит так:
<appSettings>
<add key="Environment" value="Local" />
</appSettings>
В разных подкаталогах я добавляю другой Web.config, который добавляет другие настройки, специфичные для служб в этом подкаталоге.
<appSettings>
<add key="Subdir" value="ABC" />
</appSettings>
Однако, когда я вызываю файл service (.svc) в подкаталоге, в ConfigurationManager есть только одно значение.Коллекция AppSettings («Среда»). Ключ «Subdir» нигде не найден. (Кстати, код написан с использованием ConfigurationManager, но я также пробовал использовать WebConfigurationManager, и результат тот же.)
В документации по MSDN четко указано, что файлы Web.config во вложенных каталогах должны быть кумулятивными. Итак, почему мой ключ «Subdir» не отображается в этой коллекции?
Заранее спасибо за любую помощь, которую вы можете мне оказать.
Ответ №1:
В интересах всех, кто сталкивается с этим, я нашел ответ.
Несмотря на то, что это приложение является службой, работающей под управлением IIS, и доступ к нему осуществляется через IIS, точка, в которой необходим этот элемент конфигурации, находится глубоко в производном классе System.ServiceModel.ServiceHostFactory. На этом этапе HttpContext.Current имеет значение null, поэтому ConfigurationManager не имеет доступа к информации о структуре веб-каталога и должен зависеть просто от конфигурации приложения, которая находится на верхнем уровне.
Итак, наше решение состоит в том, чтобы сделать каждый подкаталог приложением IIS и предоставить ему всю его собственную информацию о конфигурации в одном месте.
Комментарии:
1. вы должны отметить свой собственный ответ как правильный ответ — это поможет людям определить решение проблемы, которую вы указали в заголовке.