- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WCF从理论到实践(消息交换模式).
WCF三种消息交换模式对比与实现本文的出发点 通过阅读本文,您能理解以下知识: WCF定义了哪几种消息交换模式? One-Way Calls Request/Reply Duplex 用示例来解析WCF的消息交换模式本文适合的读者 本文涉及到了SOA中的消息交换的基础概念,需要一些初级的Xml Web Service和分布式系统开发的经验,最好理解WCF架构。WCF定义了哪几种消息交换模式? WCF定义了三种消息交换方式 ,分别为: One-Way Calls Request/Reply DuplexOne-Way Calls (单向调用模式)在几种消息交换模式中,one-way calls是最没良心的,对于客户端,one-way calls就如肉包子打狗,有去无回。下面的图示给出这种交换模型的特征: 在one-way信息交换模式中, 不能有任何意义的返回值(无论是参数还是函数类型)。具体特征如下: 没有返回值,返回类型只能为void 不能包含ref或者out类型的参数 只有客户端发起请求,服务端并不会对请求进行回复。通过设置OperationContract的IsOneWay=True可以将满足要求的方法设置为这种消息交换模式,方法如下: [OperationContract(IsOneWay=true)] void Test(int intVal); 上面的代码,就是将方法Test设置成为了one-way call的消息交换模式,注意如果Test方法的返回类型不是void或者带有ref或者out类型的参数,都会抛出异常InvalidOperationException,如下面列表中的方法均不能被声明为one-way模式 。int Test(int intVal); //有返回值非voidint Test();//有返回值非voidvoid Test(ref int intVal); //参数 带 refvoid Test(out int intVal); //参数 带 out总结:从这种信息交换模式的特征来看,这是一种单向的信息交换模式,应用场景:应该是客户端需要触发服务器的某些事件,但客户端并不需要服务器返回执行结果或执行过程的处理内容。Request/Reply Request/Reply(请求回应模式)request/reply比起one-way来说,就更懂得礼尚往来,它是缺省的消息交换模式,类似于http协议中的请求/响应模型。下面的图示给出这种交换模式的特征: 这种交换模式是使用最多的一中,它有如下特征: 调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型 相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后,消息交换就结束了。 在这种模式下,服务端永远是服务端,客户端就是客户端,职责分明。 用服务方法后需要等待服务的消它是缺省的消息交换模式,设置OperationContract便可以设置为此种消息交换模式 [OperationContrac] void Test(int intVal); 注意,尽管Test方法返回为void,但Server也会生成reply响应并发送给client.有来有往是这种模式的特征。 总结:这是WCF缺省的消息交换模式。应用场景:客户端需要获得WCF服务器的某种回应方能结束。Duplex (双工模式)这种交换模式比起上面两种,比较复杂,它和request/reply模式类似,也是有来有往,但处理过程却比request/reply要复杂,因为它可以在处理完请求之后,通过请求客户端中的回调进行响应操作,这种模式的图示为: 注意,这种方式和request/reply方式的图示也很类似,当二者存在着至关重要的不同,客户端也有监听节点,在callback的时候,服务器和客户端的角色会进行交换,服务端此时成了严格意义上的客户端,而客户端此时能接受服务端的callback请求,所以成为了服务端。呵呵,辩证法,都拗口死了,当事实就是这种,就像对与错一样,会相互转换,失败是成功之母,而成功是失败之源。废话少说,Duplex的特征主要包括 消息交换过程中,服务端和客户端角色会发生调换 服务端处理完请求后,返回给客户端的不是reply,而是callback请求。 打个比方,Reqeust/Reply方式像是搓澡,1个管搓,1个被搓 而duplex像是拳击,两个人都会出拳 Duplex模式对Bindding有特殊的要求,它要求支持Duplex MEP(Message Exchange Pattern),如WSDualHttpBinding和NetTcpBinding,有关Binding的介绍请参见/jillzhang/archive/2008/02/03/10
文档评论(0)