我们在IIS中托管了一组WCF服务。在我们的体系结构中,我们有不同的服务实例,这些实例在根目录下的子目录中托管的配置各不相同。
我在根目录中有一个Web.Config,它在AppSettings部分有一些配置信息。具体来说,它看起来像这样:
<appSettings>
<add key="Environment" value="Local" />
</appSettings>
在不同的子目录中,我添加了另一个Web.config,它添加了特定于该子目录中服务的其他设置。
<appSettings>
<add key="Subdir" value="ABC" />
</appSettings>
但是,当我在子目录中调用服务(.svc)文件时,ConfigurationManager.AppSettings集合中只有一个值(“Environment”)。无法找到“Subdir”键。 (顺便说一句,代码是使用ConfigurationManager编写的,但我也尝试过使用WebConfigurationManager,结果是一样的。)
MSDN上的文档明确指出嵌套目录中的Web.config文件应该是累积的。那么为什么我的“Subdir”键不会出现在该系列中呢?
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
为了其他遇到此问题的人的利益,我找到了答案。
即使此应用程序是在IIS下运行的服务,并且正在通过IIS进行访问,但需要此配置元素的位置在System.ServiceModel.ServiceHostFactory的派生类的深层。此时,HttpContext.Current为null,因此ConfigurationManager无法访问Web目录结构信息,并且必须完全依赖于顶级应用程序配置。
所以我们的解决方案是让每个子目录都成为一个IIS应用程序,并在一个地方提供它自己的所有配置信息。