2013-05-03 61 views
0

我已經在類庫中創建了一些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> 

回答

0

這不是完全清楚你想要做什麼,但它聽起來就像你正在使用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