2012-10-03 41 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 –

相关问题