2

私は WCF サービスを作成しました。基本的に、データベースとのやり取りを行います。サービスはプロジェクト内にあり、別のプロジェクトで作成したライブラリから関数を呼び出します。WCFSerivceLibrary と呼ぶ私のライブラリには、AppSettings セクションに保存されている値をいくつか引き出したい app.config もあります。

問題は、特定のクライアントから WCF サービスを呼び出し、関数が WCFServiceLibrary で実行されているときに、AppSettings を呼び出すたびに、呼び出し元のクライアントの構成ファイルをチェックすることです。

詳細な説明: この方法で WCF サービスを呼び出す Windows フォーム アプリケーションがあるとします。

MyWCFService.DoWork();

私のWCFサービスの関数DoWorkには、次のコードがあります:

Type DoWork ()
{
  //MyWCFServiceLibrary is a library in the same solution of the WCF Service.
  MyWCFServiceLibrary.DoWorkOne(); 
  MyWCFServiceLibrary.DoWorkTwo();
}

関数DoWorkOneまたはDoWorkTwo... MyWCFServiceLibrary プロジェクトの app.config に格納されている値を取得するために AppSettings を呼び出していますが、実行時に、WCF サービスを呼び出している Windows フォーム クライアントの app.cofing から AppSettings が読み込まれます。 .

  1. 上記の問題を回避するにはどうすればよいですか?
  2. WCF サービスとサービス ライブラリの構成ファイルを 1 つにすることはできますか?
  3. 両方で共有する方法は?
4

1 に答える 1

1

構成をコピーすることについて私が意味したことを以下に書いています。しかし、これが問題だとは思いません。問題はおそらく、WCF 通信を行っていないことです。サービス プロジェクトとクライアント プロジェクトの両方に DLL を含め、クライアントからクラスのメソッドを単純に呼び出していると思われます。

WCF サービスを実行するために必要な WCF 通信を行います (たとえば、ServiceHostエンドポイントで を作成する EXE)。次に、クライアントで、Visual Studio の [サービス参照の追加] メニュー項目を使用してサービス参照を追加します。

WCF 経由でサービスにアクセスするクラスが自動的に生成されるため、クライアントに DLL を含める必要はありません。

アプリケーション設定を適切に使用するには:

app.configDLL のファイルのアプリケーション設定を、DLLapp.configを使用している実行可能プロジェクトのファイルにコピーします。たとえば、これは次のようになります。

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Executable.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
            <section name="DLL.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />        
        </sectionGroup>
    </configSections>

  <applicationSettings>
      <Executable.Properties.Settings>
          <setting name="Test" serializeAs="String">
              <value>Testvalue EXE</value>
          </setting>
      </Executable.Properties.Settings>
      <DLL.Properties.Settings>
          <setting name="Test" serializeAs="String">
              <value>Testvalue DLL</value>
          </setting>
      </DLL.Properties.Settings>
    </applicationSettings>
</configuration>

その後、アプリケーションはProperties.Settings.Default.Test( を返すTestvalue EXE) を介してその設定にアクセスでき、DLL はProperties.Settings.Default.Test( を返すTestvalue DLL) を介してその設定にアクセスできます。

ConfigurationManager実際にはそれほど単純なのに、なぜ人々がそのようなものを使用する必要があるのか​​ わかりません...

于 2012-11-20T09:43:25.593 に答える