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>部分情况下怎么加你试图访问它,所以我们可以提供更新你的问题的理由更好的指导。

+0

其实我使用的是一个对象工厂库,它需要在子节中进行配置。当我调用此方法时会引发此错误: IConfiguration config = new WebConfigurationPersistenceManagerFactory()。 ()。GetConfigurationProvider()。GetConfiguration(configName); – ManS 2013-05-03 11:15:08

+0

@ManS - 这是你写的东西或其他开发者/供应商吗?你有文件吗?如果不了解这个对象工厂库,任何人都很难帮助你。你应该真的用这些信息更新你的问题。 – Tim 2013-05-03 12:30:34