说说WCF中的可信赖会话 ReliableSession

来源:互联网 发布:淘宝职业差评师团队 编辑:程序博客网 时间:2024/05/29 17:14

说说WCF中的可信赖会话

几天前,有朋友在QA上问有关WCF中可信赖会话(ReliableSession)的问题。今天重新梳理一下,主要目就是真正的弄清楚可信赖会话的作用,方法和现实意义。

正如那位的疑惑一样,很多做过WCF开发的朋友,也都对ReliableSession不太理解。查阅msdn,可以发现ReliableSession是System.ServiceModel命名空间下的一个类。主要的作用如下所述:

提供对可靠会话绑定元素属性的便捷访问,这些属性是在使用系统提供的绑定之一时提供的。

包括两个重要的属性(Property)成员:

1.InActivityTimeout

文档中的说明是:获取或设置服务在关闭之前保持非活动状态的时间间隔。

说白了一点呢,就是如果服务停留多长时间没有工作,那我们就关闭他(嘿嘿,有点像公司对待员工一样,偶 尔休息一下子,不干活还行,时间长了,老板会炒你鱿鱼的哦!)

2.Ordered

文档中说明为:获取或设置一个值,该值指示消息传递是否必须保持与消息发送一致的顺序。

任何一方,无论是客户端发送请求消息(Request Message),还是服务端发送相应消息(Response Message)。发送出来的消息都有先后次序,而接收方在接收这些消息的时候,有时候会出现错位的现象,有的消息可能后发先至,而有的可能先发后至,这就影响了通讯双方正常的交互。产生这样现象的主要的原因有两点:

1)未使用可靠连接协议,使得在传输层中出现类似现象

2)虽然试用了可靠连接协议,但在发送端或者接收端的通道中(Channel)发送或者接收有顺序问题

tcp协议用于解决第一个问题,而ReliabelSession的Ordered正可以解决第二个问题。

 

在WCF的缺省绑定中,只有以下几种支持或者默认打开了ReliableSession的功能,他们为:

wsHttpBinding

wsDualHttpBinding

wsFederationHttpBinding

netTcpBinding

其中netTcpBinding,wsHttpBinding,wsFederationHttpBinding中的ReliableSession属性均是RelibaleSession的一个派生类型,名为OptionRelibaleSession,也就是提供了可选的功能。相比ReliableSession,OptionReliableSession仅仅多了一个属性:Enabled,用这个属性可以指示是否开启可信会话。true代表开启,false的话就不开启了,那么对InActivityTimeout和Ordered的设置将无效。这里面wsHttpBinding和wsFederationHttpBinding其实都继承自wsHttpBindingBase,所在在讨论ReliableSession的时候,这两个Binding表现一致。而对与wsDualHttpBinding则默认的将ReliableSession属性的Ordered设置为了true.也就是说wsDualHttpBinding是缺省支持可信会话的。而ReliableSession的InActivityTimeout默认情况是是10分钟。

原创粉丝点击