1

複数の呼び出しがあるWCFWebサービスを備えたWebアプリケーションを使用しています。私たちは、すべての一般的な設定を収容するコアモジュールを使用して、呼び出しを同じビジネス機能に属する呼び出しの個別のモジュールに分割しようとしています。

ただし、モジュールの1つに別のデータベース接続が必要な場合がありますが、これはビジネス機能に固有であるため、コア.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>。それらはすべて正しく機能します。ただし、接続文字列を導入すると問題が発生します。接続文字列をルート構成に移動すると、問題が修正されます。これは、各ビジネス機能をセグメント化することで達成しようとしていることとは逆になります。ヒントはありますか?

4

1 に答える 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>

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 セクションに配置されなくなったことですが、「ビジネス モジュール」を独自のセクションにグループ化し、ビジネス構成を独自のファイルに移動することができます。

于 2012-10-03T22:04:31.773 に答える