我可以在WCF .config文件中嵌套连接字符串吗?

时间:2012-10-03 17:39:18

标签: wcf web-config wcf-data-services

我正在使用一个Web应用程序,该应用程序具有多个调用的WCF Web服务。我们正在尝试将呼叫分段为属于同一业务功能的单独的模块,并使用核心模块来容纳所有通用设置。

但是,我们有一种情况,其中一个模块需要不同的数据库连接,但它特定于业务功能,因此不包含在核心.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文件都是以这种方式构建的,每个服务模型都被删除,没有 - <connectionString>。他们都正常工作。但是,引入连接字符串会导致问题。将连接字符串移动到根配置中可以解决问题,它只是违背了我们试图通过将每个业务功能分段出来而实现的目标。任何提示?

1 个答案:

答案 0 :(得分:1)

无法在多个配置文件中分离出连接字符串,也无法在单个配置文件中的不同位置定义它们。

如果您有一个应用程序,并且您尝试按业务功能分离设置,则可以使用自定义配置部分。

一个。为服务的每个应用程序设置定义自定义配置节类:

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>

配置部分也可以位于不同的文件中。

<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部分,但您可以在自己的部分中对“业务模块”进行分组,并将业务配置移动到自己的文件中。