2012-10-03 45 views
1

我正在使用具有多個調用的WCF Web服務的Web應用程序。我們正在嘗試將呼叫分爲單獨的模塊,這些模塊的呼叫屬於同一業務功能,核心模塊包含所有通用設置。我可以在WCF .config文件中嵌套連接字符串嗎?

但是,我們有一種情況,其中一個模塊需要不同的數據庫連接,但它是特定於業務功能的,因此不包含在覈心.config中。

<configuration> 
    <connectionStrings> 
     <add name="connectionName" providerName="System.Data.SqlClient" 
      connectionString="Data Source=server,1111;Database=Whatever;Trusted_Connection=True;Min Pool Size=0;Max Pool Size=50;" /> 
    </connectionStrings> 
    <system.serviceModel> 
     <services> 
      <service name="Foo.DataFeedService" behaviorConfiguration="FooServiceBehavior"> 
       <endpoint binding="basicHttpBinding" bindingConfiguration="FooBasicHttpBinding" 
        name="Foo" contract="Foo.IDataFeedService"/> 
      </service> 
     </services> 
    </system.serviceModel> 
</configuration> 

基本上,這只是一個服務存根與連接字符串。我們其他的每個.config文件都是按照這種方式構建的,服務模型在每個sans-<connectionString>中都存在。他們都正常工作。雖然引入連接字符串會引起問題。將連接字符串移動到根配置可以解決問題,它只是通過細分每個業務功能來解決我們試圖完成的任務。任何提示?

+0

您是否想要擁有多個配置文件(每個模塊的配置)並將每個配置的connectionStrings分開(假設這些模塊都在同一個應用中)? –

回答

1

不可能將多個配置文件中的連接字符串分開,或者將它們定義在單個配置文件的不同位置。

如果您有一個應用程序,並且您嘗試通過業務功能分離設置,則可以使用自定義配置部分。

A.定義自定義配置節類各爲服務應用程序設置:

public class DataFeedServiceSettings : ConfigurationSection 
{ 
    [ConfigurationProperty("connectionString", IsRequired=true)] 
    public string ConnectionString { get; set; } 

    [ConfigurationProperty("propertyA", IsRequired = true)] 
    public string PropertyA { get; set; } 
} 

public class OtherServiceSettings : ConfigurationSection 
{ 
    [ConfigurationProperty("connectionString", IsRequired = true)] 
    public string ConnectionString { get; set; } 

    [ConfigurationProperty("propertyB", IsRequired = true)] 
    public string PropertyB { get; set; } 
} 

B.在配置部分添加到配置文件。

<configuration> 
    <configSections> 
     <section name="dataFeedServiceSettings" type="DataFeedServiceSettings" /> 
     <section name="otherServiceSettings" type="OtherServiceSettings" /> 
    </configSections> 
    <dataFeedServiceSettings connectionString="[connectionstring1]" 
     propertyA="value1" /> 
    <otherServiceSettings connectionString="[connectionstring2]" 
     propertyB="value2" /> 
</configuration> 

config部分也可以位於單獨的文件中。

<configuration> 
    <configSections> 
     <section name="dataFeedServiceSettings" type="DataFeedServiceSettings" /> 
     <section name="otherServiceSettings" type="OtherServiceSettings" /> 
    </configSections> 
    <dataFeedServiceSettings configSource="file1.config" /> 
    <otherServiceSettings configSource="file2.config" /> 
</configuration> 

File1.config

<?xml version='1.0' encoding='utf-8'?> 
<dataFeedServiceSettings connectionString="[connectionstring1]" 
    propertyA="value1" /> 

File2.config

<?xml version='1.0' encoding='utf-8'?> 
<otherServiceSettings connectionString="[connectionstring2]" 
    propertyB="value2" /> 

負這個方法是在連接字符串不再位於connectionStrings節,但你獲得的能夠將自己的「業務模塊」分組到他們自己的部門,並將業務配置轉移到他們自己的文件中。

+0

這是特定於WCF Web服務嗎?我們在ASP.NET Web應用程序中使用相同的方法(將連接字符串分解爲單獨的配置)並且工作正常。 – dstepan

+0

沒有足夠的代表來表決這個,但我確實喜歡這個解決方案,並且會傳遞它。 – dstepan

+0

連接字符串可以通過configSource屬性放入單獨的文件(單個文件)中,就像我對config部分所做的那樣,但我不知道有多種方法可以使用。 AppSetting可以通過文件屬性來創建多個文件,並將多個文件合併爲一個文件。但是,該屬性對於connectionStrings部分不存在。 http://stackoverflow.com/q/11121135/1027808 –

相關問題