简单理解消息的三种模式

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能够实现可持续的可靠性与更好的传递保证



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值