1.requset/reply
所有服务的缺省行为
消息能够包含参数,返回数据<body>元素或者是soap错误
2.one way
服务端发生异常之后,客户无法捕获
客户端虽然不关心消息响应,但是在有些情况还是希望消息能够确实送达
可靠性消息提供暂时性的可靠性
MSMQ Microsoft message Queuing能够提供持久的可靠性
应用的场景
1 fire and forget:不需要报告成功与否的操作,如日志记录,事件的发布
2.polling:????继续扩展学习
3.duplex:one-way操作特别适用于当涉及到回调操作时的双向通讯。
3.duplex操作
操作可以是request/reply类型或者是one-way类型
在servicecontractattribute属性上提供回调契约
必须与支持双向通讯的绑定在一起部署
回调契约
首先定义一个回调接口
添加OperationContractAttribute属性到每个方法上
操作应该为One-way类型
interface IHelloIndigoServiceCallback
{
[OperationContract(IsOneWay= true)]
void HelloIndigoCallBack();
}
将回调契约和服务契约联系起来
触发回调的操作通常应该是one-way的操作,或者在服务端打开重入(reentrancy)特性
[ServiceContract(CallbackContract=typeof(IHelloIndigoServiceCallback))]
interface IHelloIndigo
{
[OperationContract(IsOneWay=true)]
void HelloIndigo();
}
双向绑定(duplex binding)
回调契约只能在支持双向通信的终结点暴露
TCP与命名管道支持duplex
HTTP无法提供传输级别的双向通讯
WSDualHttpBinding提供了两个信道以支持双向通信(两个oneway的 WSHttpBinding信道)
调用回调
1.OperationContext.Current.GetCallBackChannel<T>()获取回调接口的引用
2.out-of-band只在客户端信道的生命期内有效
优先级高的回调使用
发布于订阅
回调能够用于暂时的“订阅/发布”场景
1.在服务端保存客户端的端点
2.在客户端信道关闭时失效
可靠的会话改进了消息传递的可靠性
使用MSMQ能够实现可持续的可靠性与更好的传递保证