5

私はまだ WCF 全体を学んでいるので、ここで我慢してください。

私が持っているのは、C# と VS 2008 を使用して作成された 2 つのセルフ ホスト サービスです。
サービス # 1 2 つの数値を加算し、結果を返します。
サービス # 2 数値の 2 乗を返します。

クライアントが 2 つの数値をサービス 1 に送信し、合計を取得してから、その合計をサービス 2 に送信して平方を取得できるようにしたいと考えています。

両方のサービスに対して 2 つの生成されたプロキシがあり、それらで Intellisense を使用できるため、その部分はおそらく機能します。

両方のサービスと通信できるように app.config ファイルを構成するにはどうすればよいですか? 現在、それを実行しようとするたびに例外が発生します。

[一度にアプリ ファイルに構成が 1 つしかなく、そのサーバーのみを呼び出そうとすると、クライアントは正常に動作します。]

これは非常に初歩的な質問だと思います。答えはおそらく「構成ファイルを_____の方法で構造化する」ですが、Googleには例/ガイドがないようです。

誰でもこれを行う方法を知っていますか?

注: 1 つのクライアント クライアントから複数の WCF サービスを 使用します。

編集: marc_sのおかげで、うまくいきました

両方のサービスが異なるアプリで実行されているため、サーバー構成ファイルを分割する必要はありませんでしたが、クライアント構成ファイルで行ったことは次のとおりです。最初に SvrUtil.exe を使用して構成ファイルを自動生成し、次にこの方法でそれらをマージしました。 :

<bindings>
  <wsHttpBinding>

    <binding>
    ...
    </binding>

    <binding>
    ...
    </binding>

  </wsHttpBinding>
</bindings>

...

  <endpoint>

...

4

3 に答える 3

3

2 つのサービスを別々のエンドポイント/ポートで実行する場合は、次のようにします。

サーバ側:

<service name="Service1">
    <endpoint address="http://localhost:8001/service1.asmx"
            binding="basicHttpBinding"
            contract="IService1" />
</service>
<service name="Service2">
    <endpoint address="http://localhost:8002/service2.asmx" 
            binding="basicHttpBinding"
            contract="IService2" />
</service>

クライアント側:

<client>
    <endpoint address="http://localhost:8001/service1.asmx"
            binding="basicHttpBinding"
            contract="IService1"
            name="Service1" />
    <endpoint address="http://localhost:8002/service2.asmx" 
            binding="basicHttpBinding"
            contract="IService2"
            name="Service2" />
</client>

これにより、サーバー上の 2 つの個別のエンドポイントと、両方と通信するクライアントが提供されます。

マルク

于 2009-03-26T17:25:02.163 に答える
3

あなたがApp.Configの回答を求めていることは承知していますが、これが役立つかもしれないと考えています。私は通常、最初にクライアント接続をプログラムで構成することから始めます。これは簡単であるためです。それが機能したら、それを App.Config に移動できます。

WCF クライアントを構成する方法の例を次に示します。

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress(serverURL);
MyServiceClient myServiceProxy = new MyServiceClient(binding, address);

次に、App.Config に以下のようなものを含めることができます。

<client>
    <endpoint address="http://localhost/service1.asmx"
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBinding" 
            contract="IService1"
            name="Service1" />
    <endpoint address="http://localhost/service2.asmx" 
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBinding"
            contract="IService2"
            name="Service2" />
</client>
于 2009-03-26T14:58:31.390 に答える
0

エンドポイントの衝突がありますか? たとえば、両方のサービスが同じポート番号でリッスンするように構成されていないことを確認してください。構成ファイル(またはそのサニタイズされたバージョン)を投稿できれば、それが役立ちます。

于 2009-03-26T14:55:52.253 に答える