是否可以使用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一起工作吗?如果是,是如何实现的?如果没有,有没有其他方法可以保证订单送达?
发布于 2010-12-27 05:51:24
http://msdn.microsoft.com/en-us/library/aa480191.aspx
介绍Windows Communication Foundation的可靠消息传递
..。
NetNamedPipeBinding建立在Windows操作系统对可靠消息传递和通过命名管道的可靠流的支持之上。因为命名管道是面向连接的,很容易支持会话,设计上是可靠的,并且通常不是桥接的,所以在这个绑定中不需要WS-RM支持。
可能的情况是,您的消息是按照服务器发送的顺序进行传递的,而后者正是您需要处理的。服务器可能正在并发运行,并且不保证有序调度。
再说一次,我可能错了。通过我上面的链接,您的合同和实现上有一些控制有序交付的attributes you can specify。
This question也有更多的信息。
https://stackoverflow.com/questions/4535364
复制相似问题