0

namedPipeバインディングを使用したoneWay呼び出しで、注文された配信を保証することは可能ですか?

namedPipeバインディングを使用して通信するWCFサービス/クライアントがあります。クライアントは、コールバック内のすべてのメソッドがOneWayとしてマークされているコールバックコントラクトを公開しています。このようなもの

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]  
public interface IMyService  
{  
    [OperationContract]  
    void MyOperation();  
}

public interface IMyServiceCallback  
{  
   [OperationContract(IsOneWay=true)]
   void MyCallback1();

   [OperationContract(IsOneWay=true)]
   void MyCallback2();  
}  

サーバー側では、MyOperationメソッドの実装は常に最初にMyCallback1を呼び出し、次にMyCallback2を呼び出しますが、クライアントが誤った順序で呼び出しを受信することがあります(MyCallback2、次にMyCallback1)。

インターネットを検索したところ、ここで説明したように一方向の操作では順序が保証されておらず、メッセージの順序を保証するreliableSessionと呼ばれるものもあります。

信頼できるセッションのためのインターネット上のすべての例はTCPバインディングを使用したものであり(NamedPipeBindingを使用した単一の例ではありません)、tcpBindingにはNetNamedPipeBindingには存在しないReliableSessionというプロパティもあります。したがって、信頼できるセッションがNetNamedPipeBindingで機能することが期待されるかどうかはわかりません。

質問:

信頼できるセッションはnamedPipeBindingで機能しますか?はいの場合、どのように?いいえの場合、注文された配達を保証できる他のアプローチはありますか?

4

1 に答える 1

3

http://msdn.microsoft.com/en-us/library/aa480191.aspx

WindowsCommunicationFoundationを使用した信頼性の高いメッセージングの概要

..。

NetNamedPipeBindingは、名前付きパイプを介した信頼性の高いメッセージ配信と信頼性の高いストリームに対するWindowsオペレーティングシステムのサポートの上にあります。名前付きパイプはコネクション型であり、セッションを容易にサポートし、設計上信頼性があり、通常はブリッジされないため、このバインディングでWS-RMをサポートする必要はありません

たぶん、あなたのメッセージはサーバーがそれらを送信する順序で配信されており、後者はあなたが扱う必要があるものです。サーバーは同時に実行されている可能性があり、順序付けられたディスパッチの保証はありません。

それからまた、私は間違っている可能性があります。上記の私のリンクから、注文された配信を制御する契約と実装で指定できるいくつかの属性があります。

この質問には、さらにいくつかの情報もあります。

于 2010-12-26T21:51:24.130 に答える