1

我正在使用具有多个调用的 WCF Web 服务的 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 文件都是这样构造的,服务模型在每个文件中都被存根,sans- <connectionString>。他们都正常工作。但是,引入连接字符串会导致问题。将连接字符串移动到根配置中解决了这个问题,它只是与我们试图通过分割每个业务功能来实现的目标背道而驰。有什么提示吗?

4

1 回答 1

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>

配置部分也可以位于单独的文件中。

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

文件1.config

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

文件2.config

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

这种方法的缺点是连接字符串不再位于 connectionStrings 部分,但是您可以将“业务模块”分组到它们自己的部分中并将业务配置移动到它们自己的文件中。

于 2012-10-03T22:04:31.773 回答