Значения AppSettings не отображаются в web.config в подкаталоге

#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. вы должны отметить свой собственный ответ как правильный ответ — это поможет людям определить решение проблемы, которую вы указали в заголовке.