可靠会话传输需要解决两个问题:重复消息和无序交付;制定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. WCF 学习笔记之双工实现

    WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...

  2. WCF学习笔记之事务编程

    WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...

  3. WCF学习笔记之传输安全

    WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...

  4. WCF 学习笔记之异常处理

    WCF 学习笔记之异常处理 1:WCF异常在配置文件 <configuration> <system.serviceModel> <behaviors> <s ...

  5. WCF 学习笔记

    Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点.服务终结点 ...

  6. [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. WCF学习笔记(2)——使用IIS承载WCF服务

    通过前面的笔记我们知道WCF服务是不能独立存在,必须“寄宿”于其他的应用程序中,承载WCF服务的应用程序我们称之为“宿主”.WCF的多种可选宿主,其中比较常见的就是承载于IIS服务中,在这里我们来学习 ...

  9. AMQ学习笔记 - 06. 可靠消息传送

    概述 本文介绍JMS中可能发生消息故障的3个隐患阶段,以及确保消息安全的3种保障机制. 故障分析 在介绍可靠传送的确保机制之前,先分析消息在传送的过程中可能在哪个阶段出现问题. 1.两个跃点 跃点的含 ...

随机推荐

  1. PHP 笔记——String 字符串

    1. 定义 单引号括起来的字符串被原样输出. 双引号字符串中的变量被PHP解析为变量值. 2. 获取字符串长度 strlen(string $string): int 在utf-8下,汉字占3个字符, ...

  2. 51nod 1962区间计数(单调栈加二分)

    题目要求是求出两个序列中处于相同位置区间并且最大值相同的区间个数,我们最直观的感受就是求出每个区间的最大值,这个可以O(N)的求,利用单调栈求出每个数作为最大值能够覆盖的区间. 然后我们可以在进行单调 ...

  3. [P1768]天路(分数规划+SPFA判负环)

    题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了 ...

  4. 【二分查找-最大化平均值】POJ2976 - Dropping Test

    [题目大意] 给出n组ai和bi,去掉k个使得a的总和除以b的总和最大. [思路] 也就是取(n-k)个数,最大化平均值,见<挑战程序设计竞赛>P144,最后公式为c(x)=((ai-x* ...

  5. bzoj4034 树上操作

    Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中 ...

  6. 2349 Arctic Network(中文版)

    试题描述: 国防部希望通过无线网络连接几个北方前哨基地. 在建立网络时将使用两种不同的通信技术:每个前哨基站都将拥有无线电收发器,另外还有一些前哨卫星通道. 任何带卫星频道的两个前哨都可以通过卫星进行 ...

  7. python开发_random

    和java中的random()函数一样,在python中也有类似的模块random,即随机数 下面是我做的demo 运行效果: ==================================== ...

  8. HDU 4618 Palindrome Sub-Array 暴力

    Palindrome Sub-Array 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4618 Description A palindrome s ...

  9. VK Cup 2016 - Qualification Round 1 (Russian-Speaking Only, for VK Cup teams) B. Chat Order 水题

    B. Chat Order 题目连接: http://www.codeforces.com/contest/637/problem/B Description Polycarp is a big lo ...

  10. UESTC 2015dp专题 A 男神的礼物 区间dp

    男神的礼物 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descri ...