WCF服务无法读取配置文件
问题描述:
我已经在类库中创建了一些WCF服务。 这些服务需要一些配置值才能正常工作。所以我在IIS上部署服务后将这些配置添加到web.config文件中。 的问题是,当我尝试使用这些服务我得到下面的异常而读取配置:当一个独立的exe内不运行,必须指定exePath:WCF服务无法读取配置文件
System.ArgumentException。
知道,当我测试服务,它在IIS上托管它们之前工作正常。
现在的问题是什么我应该改变,使dll服务可以配置。
这里是web.config文件的一部分。
<children>
<child name="service_config">
<properties>
<property name="connection_name" value="Photo" valueType="System.String" />
<property name="data_access_interface" value="data_access" valueType="System.String" />
<property name="is_client_db" value="false" valueType="System.String" />
<property name="exchange_service" value="exchange_service_key" valueType="System.String" />
<property name="max_file_size" value="1000" valueType="System.String" />
<property name="email_sender" value="[email protected]" valueType="System.String" />
<property name="email_body_template_name" value="test_files/Template.txt" valueType="System.String" />
<property name="tablet_photo_size_height" value="100" valueType="System.String" />
<property name="tablet_photo_size_width" value="90" valueType="System.String" />
<property name="phone_photo_size_height" value="200" valueType="System.String" />
<property name="phone_photo_size_width" value="180" valueType="System.String" />
<property name="phone_photo_optimized_size_height" value="80" valueType="System.String" />
<property name="phone_photo_optimized_size_width" value="60" valueType="System.String" />
<property name="web_photo_size_height" value="127" valueType="System.String" />
<property name="web_photo_size_width" value="170" valueType="System.String" />
<property name="email_client_key" value="email_client_key" valueType="System.String" />
</properties>
答
这不是完全清楚你想要做什么,但它听起来就像你正在使用ConfigurationManager.OpenExeConfiguration
读取配置文件的指定部分(S)。您收到的错误消息为您提供了一个确定问题的良好起点 - 可能与IIS没有指向exe的路径有关。
你没有显示你用来访问配置文件的代码,而你发布的配置没有很多上下文,所以很难告诉你该怎么做。
但是,我会使用配置文件的<appSettings>
部分(可在app.config和web.config文件中找到)来存储这些属性,然后您可以检索它们ConfigurationManager.AppSetting[keyName]
。
事情是这样的:
<appSettings>
<add key="connection_name" value="Photo" />
<add key="data_access_interface" value=data_access" />
<!-- plus the rest of your values -->
</appSettings>
然后,你只需使用类似:
string connectionName = ConfigurationManager.AppSettings["connection_name"];
string dataAccesInterface = ConfigurationManager.AppSettings["data_access_interface"];
这将工作不管你运行它作为一个独立的EXE或在IIS托管它。
如果有你不想(或不能)使用标准<appSettings>
部分,请与各地<children>
部分情况下怎么加你试图访问它,所以我们可以提供更新你的问题的理由更好的指导。
其实我使用的是一个对象工厂库,它需要在子节中进行配置。当我调用此方法时会引发此错误: IConfiguration config = new WebConfigurationPersistenceManagerFactory()。 ()。GetConfigurationProvider()。GetConfiguration(configName); – ManS 2013-05-03 11:15:08
@ManS - 这是你写的东西或其他开发者/供应商吗?你有文件吗?如果不了解这个对象工厂库,任何人都很难帮助你。你应该真的用这些信息更新你的问题。 – Tim 2013-05-03 12:30:34