Не удается прочитать Web.config с помощью ConfigurationManager.AppSettings

Я создал службу WCF, которая использует Web.config, чтобы получить некоторые appSettings. В Visual Studio это работает прекрасно, но когда я публикую и устанавливаю сервис, он внезапно получает свои appSettings из App.config, а не из Web.config.

Я знаю это, потому что я перебираю appSettings и выводю результат на консоль с этим кодом:

foreach (string key in ConfigurationManager.AppSettings.AllKeys)
{
     Console.WriteLine("Name: {0} Value: {1}", key, ConfigurationManager.AppSettings[key]);
}

Мои конфиги выглядят так:

Web.config

  ....
  <appSettings>
    <add key="IQDir" value="C:\Program Files (x86)\Ridder iQ Client (lokaal)\Bin"/>
    <add key="FileURL" value="localhost:8080/WebPortal_2.0/"/>
  </appSettings>
  ....

App.config

....
  <appSettings>
    <add key="test1" value="wtf is going on!"/>
    <add key="test2" value="waargh"/>
    <add key="test3" value="I am getting a headache over here!!"/>
  </appSettings>
....

Когда я бегу в визуальную студию, я получаю:

Но когда я использую опубликованный код внутри живой среды, я получаю это:

Почему это происходит и как я могу заставить ConfigurationManager чтобы получить appSettings из Web.config вместо App.config.

2 ответа

Решение

Если у вас есть стандартный WCF-проект, у вас должен быть только файл Web.config, а не App.config.

Я бы вообще пропустил старый способ использования appSettings. Вместо этого используйте applicationSettings, используя вкладку "Настройки" в свойствах проекта.

Это создаст это в Web.Config:

<applicationSettings>
    <Projectname.Properties.Settings>
        <setting name="Testenvironment" serializeAs="String">
            <value>True</value>
        </setting>
    </Projectname.Properties.Settings>
</applicationSettings>

Для получения дополнительной информации: appSettings vs applicationSettings. appSettings устарел?

ConfigurationManager используется для выбора значений из файла конфигурации проекта, в котором он запущен. Например, вы выставили свой wcf на веб-сервере S1 и используете его в консольном приложении с клиентского компьютера M1. Теперь, если ваш код C# работает на S1, он будет выбирать значения из web.config из папки кода wcf на S1. Но если этот код выполняется на клиентском компьютере M1 (консольное приложение, потребляющее службу), он будет выбирать значения с компьютера M1. То, с чем вы сталкиваетесь, обычно происходит после публикации.

Другие вопросы по тегам