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)。

在搜索互联网时,我发现这里提到的单向操作不能保证顺序,还有一种叫做可靠会话的东西可以确保消息排序。

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

问题:

可靠会话是否适用于 namedPipeBinding?如果是,如何?如果没有,是否有任何其他方法可以保证订单交付?

4

1 回答 1

3

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

Windows Communication Foundation 的可靠消息传递简介

...

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

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

再说一次,我可能是错的。从我上面的链接中,您可以在合同和实施中指定一些属性来控制订购的交付。

这个问题也有更多信息。

于 2010-12-26T21:51:24.130 回答