使用oneWay调用使用NetNamedPipeBinding进行有序传递

时间:2010-12-26 20:49:11

标签: c# wcf netnamedpipebinding

是否可以使用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)。

在互联网上搜索时,我发现订单无法保证单向操作如here所述,并且还有一些名为reliableSession的内容可确保消息排序。

互联网上用于可靠会话的所有示例都使用TCP绑定(而不是具有NamedPipeBinding的单个绑定),并且tcpBinding还具有名为ReliableSession的属性,该属性在NetNamedPipeBinding上不存在。所以我不确定是否可以使用NetNamedPipeBinding进行可靠的会话。

问题:

可靠会话与namedPipeBinding一起使用吗?如果有,怎么样?如果没有,是否有其他方法可以保证订购?

1 个答案:

答案 0 :(得分:3)

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

  

使用Windows Communication Foundation进行可靠消息传递

     

...

     

NetNamedPipeBinding位于Windows操作系统的基础之上,支持可靠的消息传递和通过命名管道的可靠流。因为命名管道是面向连接的,所以很容易支持会话,设计可靠,并且通常没有桥接,在此绑定中不需要WS-RM支持

有可能,您的邮件按照服务器发送的顺序传递,而后者是您需要使用的邮件。服务器可能同时运行,并且不保证有序的调度。

然后,我可能是错的。从上面的链接中,您的合同和实施中有一些attributes you can specify可以控制订购的交付。

This question还有更多信息。