コールバックによるデュプレックスサービス

以下のメソッドを持つサービスがあるとします。

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(ISampleServiceCallback))]
interface ISampleService
{
    [OperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = false)]
    void Connect(string version);

    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
    void Request(string uuid, string description);

    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)]
    void Disconnect();
}

interface ISampleServiceCallback
{
    [OperationContract(IsOneWay = true)]
    void Reply(string uuid, string description);
}

クライアントは Connect メソッドを呼び出し、クライアントとサーバーの間で新しいセッションが開始されます。 このセッション中、クライアントはリクエストメソッドを呼び出すことができます。リクエストメッセージを受信した後、サーバはクライアントに応答できる場合、コールバックを使用して応答を送信します。

2つのノードがクライアントとサーバーではなく、2つのピアであるとします。どのようにして双方向コミュニケーションを行うことができますか?私は、2つのノードのそれぞれが他のノードの要求を呼び出すことができることを望みます...それは可能ですか? 言い換えれば、2つのノードのうちの1つは、他のノードのConnectメソッドを呼び出すことによって別のノードとの新しいセッションを作成することにします...後者が接続を受け入れる場合、新しい通信セッションが作成されますが、他のノードのメソッドを呼び出す。

私の考えは、2つのノード間に2つのセッションを作成することでした。最初のセッションでは、ノードAはクライアント、ノードBはサーバーです。第2のセッションは反対方向を有する。ノードBはクライアントであり、ノードAはサーバである。 しかし、このように私は2つのTCP接続を持っています...選択肢はありますか?

Here is a chart that explains how it should work: http://imageshack.us/photo/my-images/600/multipleservices.png/

どうもありがとう!

2

2 答え

あなたが望むのは二重通信です。それはバインディングに依存し、それは可能であるかどうかに依存します。 WsDualHttpBindingを使用することもできますが、これは公式な標準ではないため推奨されません。ほとんどのTcpバインディングは二重化をサポートしています。 rel="nofollow noreferrer">ここの情報またはこのポスト

1
追加された
それぞれのピアには、 this のようなNetTcpBindingデュプレックスサービスがあり、これを提供します他の同僚へのサービス。同時に、各ピアは、他のピアによって提供される同じサービスを使用することができる。しかし、このようにして、私は2つの接続、すなわち各方向に1つの接続を持つことになります。
追加された 著者 enzom83,
Duplexは、クライアント< - >クライアントではなく、クライアント< - >サーバ用です。それがP2Pです。
追加された 著者 Louis Kottmann,

NetPeerTcpBindingバインディングを調査しましたか?何らかの種類のピアリゾルバを使用することもできますし、WCFはデフォルトでPNRP(MicrosoftからのPeer Name Resolution Protocol)を使用すると思います。あるいは、あなたが冒険を感じているなら、あなた自身のピアリゾルバを実装することができます。

1
追加された
はい、NetPeerTcpBindingについて読んでいますが、NetTcpBindingのみを使用します。
追加された 著者 enzom83,
換言すれば、第1のピアは、コールバックで応答する第2のピアによって提供されるデュプレックスサービスを使用する。同時に、第2のピアは、第1のピアによって提供される同じサービスを使用する。サービスがセッションを使用する場合、2ピア通信では2つのTCP接続を使用する必要があります...
追加された 著者 enzom83,
次に、NetTcpBindingを介して二重化を検討しています。 Duplexは、同じTCP接続を介して双方向通信を行っていることを意味します。
追加された 著者 RobertMS,