【问题标题】:Can't read Web.config with ConfigurationManager.AppSettings无法使用 ConfigurationManager.AppSettings 读取 Web.config
【发布时间】:2013-12-15 15:59:00
【问题描述】:

我已经构建了一个 WCF 服务,它使用 Web.config 来获取一些 appSettings。在 Visual Studio 中效果很好,但是当我发布和安装服务时,它突然从 App.config 而不是从 Web.config 获取其 appSettings。

我知道这一点,因为我遍历 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>
....

当我在 Visual Studio 中运行时,我得到:

但是当我在实时环境中使用已发布的代码时,我得到了这个:

为什么会发生这种情况,如何强制 ConfigurationManager 从 Web.config 而不是 App.config 获取 appSettings。

【问题讨论】:

  • 为什么会有 web.config 和 app.config?
  • 你试过用System.Web.Configuration.WebConfigurationManager代替吗?
  • @Tobberoth 我已经尝试了很多东西,包括WebConfigurationManager 都是一样的结果。
  • @sirwilliam 首先,为什么你有一个 app.config?其次,你确定你测试正确吗?从我在 MSDN 文档中可以看到,WebConfigurationManager 无法打开 app.configs,它只能打开 Web 应用程序和机器配置文件。
  • @Tobberoth 这就是我问这个问题的原因,我不明白为什么会这样。在测试环境中它会做它应该做的事情,但是当我发布它时它开始表现得很奇怪。

标签: c# .net visual-studio-2010 wcf configurationmanager


【解决方案1】:

如果你有一个标准的 WCF 项目,你应该只有 Web.config 文件,而不是 App.config。

我会完全跳过使用 appSettings 的旧方式。改用 applicationSettings,方法是使用项目属性中的 Settings 选项卡。

它将在 Web.Config 中创建:

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

欲了解更多信息:appSettings vs applicationSettings. appSettings outdated?

【讨论】:

  • 我还有一个 App.config 文件。它是自动创建的。
【解决方案2】:

configurationManager 用于从运行它的项目的配置文件中选择值。例如,您已经在 Web 服务器 S1 上公开了您的 wcf,并且您正在客户端机器 M1 的控制台应用程序中使用它。现在,如果您的 c# 代码在 S1 上运行,那么它将从 S1 上的 wcf 代码文件夹中的 web.config 中选择值。但是,如果此代码在客户端机器 M1(使用服务的控制台应用程序)上运行,那么它将从机器 M1 中选择值。你所面临的,通常发生在发布之后。

【讨论】:

  • 我现在正在本地机器上运行它来测试它在我迄今为止测试过的任何机器上都不起作用。奇怪的是WebConfigurationManager从App.config 中获取了它的appSettings。有没有办法查看WebConfigurationManager 获取其 .config 文件的路径?
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 2021-08-28
相关资源
最近更新 更多