我有一个WCF ASP.Net 4.0 Web服务,我们称之为“WebService”。 WebService正在使用我们称之为“WebServiceClassLibrary”的类库程序集。 WebServiceClassLibrary引用另一个类库程序集(“ExternalClassLibrary”)。 ExternalClassLibrary用于使用配置文件。它使用此文件来了解在运行时发送一些HTTP帖子的位置。我遇到了一个问题,无论我在哪里放置ExternalClassLibrary的配置部分,它似乎都在使用默认配置(当我在运行时找不到配置文件时,我会发现这种行为)。
我希望这意味着当.Net尝试查找ExternalClassLibrary的配置时,它无法执行此操作并使用已编译程序集中的配置信息。我试图通过在WebService的web.config文件中放置配置部分来覆盖此配置,方法是为ExternalClassLibrary创建配置文件并为WebServiceClassLibrary创建配置文件。即使我尝试覆盖每个位置的配置,它仍然使用默认配置。我在IIS 7中托管该网站。
有人可以告诉我如何确定我需要在哪里放置这些重要的配置信息?我曾尝试使用SysInternals的进程监视器来查看失败的文件系统读取尝试,但它只显示两个可能的地方来覆盖配置,而且它们都没有做到这一点。
欣赏它!
- UPDATE,这是我试图加载的XML文件的内容 -
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MyAppName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<MyAppName.Properties.Settings>
<setting name="APIURL" serializeAs="String">
<value>http://servername/default.html</value>
</setting>
<setting name="APIAPPINI" serializeAs="String">
<value>app.ini</value>
</setting>
<setting name="ApiUrlRoot" serializeAs="String">
<value>https://www.domain.com/company[instance]test/index.htm</value>
</setting>
<setting name="ApiInstances" serializeAs="Xml">
<value>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>usa</string>
<string>eu</string>
<string>asia</string>
<string>lat</string>
<string>jpn</string>
</ArrayOfString>
</value>
</setting>
<setting name="ApiKey" serializeAs="String">
<value>password</value>
</setting>
<setting name="ApiUrlRoot" serializeAs="String">
<value>http://site[instance].domain.com/</value>
</setting>
<setting name="ProductId" serializeAs="String">
<value>12345</value>
</setting>
</MyAppName.Properties.Settings>
</applicationSettings>
</configuration>
答案 0 :(得分:2)
您的ExternalClassLibrary应该将配置加载为
ConfigurationManager.OpenExeConfiguration("ExternalClassLibrary.dll.config");
.Net ConfigManager默认只加载主进程配置(exe.config / web.config),任何使用dll.config的dll都应该显式加载。
答案 1 :(得分:1)
正确答案(正如我的问题所说)实际上是问题本身
我试图通过在配置部分中放置配置部分来覆盖此配置 web.config文件......
在.Net中使用程序集时,框架会查看使用程序集的配置文件中的配置。这就是问题的答案。这是我学习过去为程序集配置信息的地方,但在这种情况下,这种方法似乎让我失望。
我在这种情况下没有运气的原因是web.config文件覆盖了默认配置是由于我的代码中的一个错误,当我真正尝试在配置文件中请求值时我明确请求“DefaultValue” “这将始终是在编译的程序集中找到的。
代码是这样的:
Properties.Settings.Default.Properties["ApiUrlRoot"].DefaultValue;
我在开发过程中没有意识到情况就是这样。我不得不试验并错误地获取值,同时索引到Properties而不是标准的强类型方法来读取值:
Properties.Settings.Default.ApiUrlRoot;
这是因为我的代码部分必须动态地从配置文件中读取值。根据情况,它将从配置文件中读取不同的值。最后,这里是动态配置读取代码的版本:
Properties.Settings.Default.PropertyValues["ApiUrlRoot"].PropertyValue;