可靠会话传输需要解决两个问题:重复消息和无序交付;制定WS-RM的一个主要目的就是实现一种模块化 的可靠消息传输机制;WS-RM两个版本(WS-RM1.0和WS-RM1.1);

WCF中整个可靠会话的实现完全是通过ReliableSessionBindingElement这个绑定元素创建的信道实现的;

  • AcknowledgementInterval如果消息的发送方和接收方通过双工通道连接,接收方能够随时向接收方发送确认。在这种情况下,为了降低网络流量,WCF采用批量确认的机制。也就是说,当接收端成功接收到某个消息的时候,并不会立即针对该消息发送确认,而是等待一定时间后,对所有接收到的消息进行批量确认。AcknowledgementInterval表示消息接收端发送确认之前等待的时间间隔,默认为0.2秒(200毫秒)。该设置仅仅针对于NetTcpBingding和WSDualHttpBiding等支持双工通信的绑定有效,而像BasicHttpBinding和WSHttpBiding这样的绑定无此设置。
  • FlowControlEnabled该属性指示可靠会话是否已启用流控制(Flow Control)。流控制是可靠会话实现的一种机制,目的是确保发送方所发送的消息数不超过接收方可处理的消息数。接收方拥有消息缓冲区,用于容纳突增的消息和无序的消息。接收方在每次确认时都会告知发送方此缓冲区中的剩余空间量。利用此信息,发送方就可以在接收方缓冲区中没有剩余空间时,停止发送新的消息。FlowControlEnabled默认值为True。
  • InactivityTimeout在WS-RM中,被创建的RM序列具有一个Expires属性表示序列的生命周期。但是,我们不能通过可靠会话的整个生命周期的时限,也就是,整个可靠会话并没有具体时间的限制。但是,WCF并不能依赖于可靠会话被显式地被终止,而设定一个超时时限,在该时间范围内如何没有活动的消息交换,WCF会将可靠会话关闭。InactivityTimeout就是这么一个表示可靠会话在关闭之前保持非活动状态的时间间隔,默认值为10分钟。
  • MaxPendingChannels通道在等待被接受时处于挂起状态。一旦达到该限制,就不会创建任何通 道并将其置于挂起模式,直到此数值降低(通过接受挂起的通道)。这是对每个侦听器的限制。当达到此阈值时如果远程应用程序尝试建立新的可靠会话,则会拒绝请求且打开操作将提示此错误。这么一个可靠会话期间可为挂起状态的最大通道数通过MaxPendingChannels表示,默认值为4;
  • MaxRetryCount如果在某个可接受时间范围内,消息的发送端没有接收到某个以发消息的确认,会对该消息进行重传。MaxRetryCount表示重传的次数,最小值为1,最大值为0x7FFFFFFF(Int32.MaxValue)的默认值为8。WCF使用指数补偿算法根据计算的平均往返时间来确定何时重新传输。初始重试时间是根据测量的创建会话往返时间来计算的。重新传输算法是每进行一次尝试,延迟时间就会增加一倍。如此一来,从第一次传输尝试到最后一次传输尝试大约会历时 8.5 分钟。可以根据计算的往返时间来调整第一次尝试重新传输的时间,因此这些尝试所经历的时间将会相应地发生变化。这样,可以使重新传输时间动态地适应不断变化的网络条件。MaxRetryCount表示进行重传的次数,在达到此限制之前未接收到确认被视为严重的通信故障,这种情况将引发通道出错的事件。
  • MaxTransferWindowSize该属性表示消息缓冲区的大小,或者说是缓冲区能够容纳消息的数量。MaxTransferWindowSize最小值为1,最大值为4096,默认值为32。MaxTransferWindowSize属性的值可在发送方和接收方进行设置。如果达到发送方的这个限制,则会阻止其他发送调用。如果达到接收方的这个限制,则不会接受到达基础通道的新消息。可靠会话会使用窗口 协议来帮助提高网络利用率。所需的缓冲量直接从传输窗口的大小派生而来。调整此值时请注意,最佳传输窗口直接与带宽和延迟相关。理想的最大窗口大小是带宽乘以延迟。如果比此值小,网络利用率就会低于 100%,如果比此值大,就会浪费空间。
  • Ordered该属性表示是否启用“有序传输”机制确保消息的接收端完全按照消息被发送的顺序进行交付;默认值为False;
  • ReliableMessagingVersion该属性表示可靠会话支持的WS-RM的版本。在WCF中,该WS-RM通过ReliableMessagingVersion类型表示(不是枚举)。ReliableMessagingVersion定义如下,我们可以通过两个静态只读属性WSReliableMessagingFebruary2005和WSReliableMessaging11得到两个表示WS-RM 1.0和WS-RM 1.1的ReliableMessagingVersion对象。静态只读属性Default表示默认的WS-RM版本,其值目前和WSReliableMessagingFebruary2005属性一致。

除了InactivityTimeout和Ordered两个属性可以进行设置之外,定义在ReliableSessionBindingElement绑定元素中的各个属性大多采用默认值。但是,有一个例外,即表示支持WS-RM版本的ReliableMessagingVersion属性。对于WSHttpBinding、WSDualHttpBinding和WSFederationHttpBinding支持的版本是WS-RM 1.0,而WS2007HttpBinding和WS2007FederationHttpBinding则支持的是WS-RM 1.1。

配置绑定设置:

<system.serviceModel><bindings><ws2007HttpBinding><binding name="reliableSession2007Binding"><reliableSession enabled="True" inactivityTimeout="00:20:00"  ordered="True"/><security mode="None"/></binding></ws2007HttpBinding></bindings><client ><endpoint name="calculatorservice" address="http://127.0.0.1/calculatorservice" binding="ws2007HttpBinding" bindingConfiguration="reliableSession2007Binding" contract="Artech.MessageInspection.Sender.ICalculator" /></client>
</system.serviceModel>

WCF学习笔记之可靠会话相关推荐

  1. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  2. WCF学习笔记(2)——独立WCF服务

    本文将建立一个silverlight与wcf通讯的简单实例,wcf服务将被独立出来,而不再寄放在Web中.以下是详细步骤: 新建Silverlight应用程序,名称WCFtest,在解决方案上右键添加 ...

  3. 【应用篇】WCF学习笔记(一):Host、Client、MetadataExchage

    虽然已经在多个项目中成功应用过WCF,但是感觉自己对WCF的知识只知道一些皮毛而已.上次学习WCF也是为了项目需要,囫囵吞枣.这不是我学习方法的态度.所以时至今日,又重新拾卷,再仔细的将WCF一些细节 ...

  4. WCF学习笔记(基于REST规则方式)

    一.WCF的定义 WCF是.NET 3.0后开始引入的新技术,意为基于windows平台的通讯服务. 首先在学习WCF之前,我们也知道他其实是加强版的一个面向服务(SOA)的框架技术. 如果熟悉Web ...

  5. WCF学习笔记(一):WCF Service Application和WCF Service Library的区别

    近来在学习WCF,遇到了不少问题,有的让我焦头烂额,不过解决问题的过程就是学习的过程,收获也不少. 昨天有个问题开始困扰我--WCF Service Application和WCF Service L ...

  6. WCF学习笔记(二):在WCF中使用集合传输数据

    最近的开发,一直被DataContract头疼,微软为了更好的通用性和代码无关性,将DataContract进行了一系列的优化,使作为DataContract的类在进行Serialize的时候会被序列 ...

  7. WCF学习笔记(三):开启net.tcp端口

    正在做一个使用tcp协议的WCF示例,遇到很多问题.首当其冲的问题就是--如何为WCF打开tcp端口... 具体步骤如下: 1.在IIS中为WCF安装支持TCP协议的组件: 2.在防火墙的入栈规则中开 ...

  8. ZeroMQ学习笔记(4)——可靠的请求-应答模式

    第四章 可靠的请求-应答模式 懒惰海盗模式:来自客户端的可靠的请求-应答. 简单海盗模式:使用负载均衡的可靠的请求-应答. 偏执海盗模式:使用信号检测的可靠的请求-应答. 管家模式:面向服务的可靠排队 ...

  9. WCF学习笔记之序列化

    DataContractAttribute 与 DataMenberAttribute DataContractAttribute该特性只能用于枚举.类和结构体,而不能用于接口:又因为DataCont ...

最新文章

  1. elasticsearch 客户端工具_万字长文:详解 Spring Boot 中操作 ElasticSearch
  2. Android退出程序(二)——利用广播机制
  3. Longest Substring Without Repeating Characters
  4. 关于MSSQL数据存储的问题
  5. 生成html_听说你不会用Python将字符串生成PDF?来,我教你!
  6. oracle .dbf文件过大_学习这篇Oracle数据库文件坏块损坏的恢复方法,拓展你的知识面...
  7. centos7如何安装samba-client_Docker: 教程07 - ( 如何对 Docker 进行降级和升级)
  8. 电源大师课笔记 1.5
  9. Java 求100以内的质数(素数)
  10. 斐讯n1刷linux服务器,斐讯N1刷机Linux(Armbian)
  11. 聚焦基因组学研究,JMP参加第七届国际统计遗传学与基因组学高峰论坛
  12. 惠普服务器如何选择光驱启动不了系统盘,惠普电脑如何设置光驱启动呢
  13. 网络文件系统——上(samba,NFS,实现网络共享文件)
  14. PetaLiunx配置时sourcing bitbake报错解决方法
  15. 201207-四步十秒通过VSCode创建Python代码片段Snippet
  16. pythone二级题库 + 刷题软件 (超详细解析,看完必过) 第十一套
  17. 第八篇order订单专题(4)市价单、收盘价单、限价单、止损单
  18. 老王,快给你的 Spring Boot 做个埋点监控吧!
  19. 绿盟扫描监测出URL存在http host 头攻击漏洞的解决方案
  20. 半路出家,开始学习java

热门文章

  1. python round函数_python中round函数如何使用
  2. 图像“位操作”有什么用?
  3. 【知识图谱】人工智能技术最重要基础设施之一,知识图谱你该学习的东西
  4. 【数据】短视频识别,都有那些行业标准?
  5. [caffe解读] caffe从数学公式到代码实现4-认识caffe自带的7大loss
  6. ThinkingRock:最好的GTD软件
  7. 耐寂寞谋定未来-农业大健康·国情讲坛:乡村振兴守公益心
  8. 中欧谋定原产地保护-农业大健康·万祥军:战略格局地理标志
  9. 微信小程序实现web端锚点功能
  10. Delphi应用程序的调试(四)The Debug Inspector