[转自MSDN]可靠会话(Reliable Session)的最佳实践

一、设置 MaxTransferWindowSize

Windows Communication Foundation (WCF) 中的可靠会话使用传输窗口保存客户端和服务上的消息。可配置属性 MaxTransferWindowSize 指示传输窗口可以保存多少条消息。

在发送方,这指示在等待确认消息时传输窗口可以保存多少条消息,在接收方,则指示为服务缓冲多少条消息。

选择合适的大小可影响使用网络的效率以及运行服务的最佳容量。以下各节将详细介绍选择此属性的值时要考虑的事宜以及值的影响。

默认传输窗口大小是 8 条消息。

有效使用网络

此处的“网络”一词对应于在客户端(发送方)和服务(接收方)之间用作通信基础的任何事物。这包括传输连接以及中间的任何中介或者网桥,包括 SOAP 路由器或 HTTP 代理/防火墙。

有效使用网络可确保充分利用网络容量。可通过网络每秒传输的数据量(称为“数据速率”)以及从发送方到接收方传输数据所用的时间(称为“延迟”)都会影响利用网络的有效性。

在发送方,属性 MaxTransferWindowSize 指示在等待确认消息时,其传输窗口可以保存多少条消息。因此,如果网络延迟时间很长,为确保及时响应发送者和网络有效利用,应增加传输窗口大小。

例如,即使发送方满足数据速率,如果发送方和接收方之间存在多个中介或者中介或网络存在损失,则延迟时间会很长。因此,在发送方接受要在网络上发送的新消息之前,必须在其传输窗口中等待消息的确认信息。具有高延迟的缓冲区越小,网络利用率就越低。另一方面,传输窗口大小过高可能会影响服务,原因是服务可能需要满足客户端的高发送速率。

满负荷运行服务

为最大程度地有效使用网络,理想情况是服务也按最佳容量运行。接收方上的传输窗口大小属性指示接收方可以缓冲多少条消息。此消息缓冲不仅帮助网络流控制,而且还可让服务满负荷运行。例如,如果缓冲区是
1,而且消息到达的速度超过了服务可以处理的速度,则网络可能会丢弃一些消息,并可能浪费或闲置网络容量。

使用缓冲区可提高服务的可用性,因为服务可以在处理以前接收到的消息的同时并发接收和缓冲消息。

建议您在发送方和接收方使用相同的 MaxTransferWindowSize

启用流控制

流控制是确保发送方和接收方互相保持步调一致的机制,也就是说,使用和处理消息的速度与产生消息的速度一样快。客户端和服务上的传输窗口大小可确保发送方和接收方在一个合理的同步窗口中。

当在 WCF 客户端和 WCF 服务之间使用可靠会话时,强烈建议将 FlowControlEnabled 属性设置 true。

二、设置MaxPendingChannels

当编写一个允许从不同的客户端启用可靠会话通信的服务时,可能会有许多客户端同时建立与该服务的可靠会话。在这些情况下,服务的响应取决于 MaxPendingChannels 属性。

当发送方创建到接收方的可靠会话通道时,发送方和接收方之间的握手将建立可靠会话。建立可靠会话之后,该通道会放入到挂起的通道队列中以供服务接受。此 MaxPendingChannels 属性指示有多少个通道可以处于此状态。

服务有可能会处于一种无法接收更多通道的状态。如果队列已满,则会拒绝建立可靠会话的尝试,客户端必须重试。

队列中挂起的通道也可能会在队列中保持很长时间。此外,可能会出现可靠会话的非活动超时,从而导致通道转换到错误状态。

因此,在编写同时服务于多个客户端的服务时,应设置一个适合于您的需要的值。为 MaxPendingChannels 属性设置过高的值会影响工作集。

MaxPendingChannels 的默认值为 4。

可靠会话和宿主

在为使用可靠会话服务提供 Web 宿主时,应该记住下面的重要注意事项:

  • 可靠会话是有状态的,而状态在 AppDomain 中进行维护。这意味着,属于可靠会话的一部分的所有消息必须在同一个 AppDomain 中进行处理。其大小超过 1 的网络场和网络园无法保证满足此约束。
  • 使用双工 HTTP 通道(例如使用 WsDualHttpBinding)的可靠会话会要求多于默认的每个客户端
    2 个 HTTP 连接的连接数。这意味着,双工可靠会话会在每个方向上要求 2
    个连接,因为并发应用程序和协议消息可能会在任意给定时间在每个方向上进行传输。这意味着,在某些特定的条件下,根据消息交换服务模式的不同,使用双工
    HTTP 和可靠会话的 Web 承载服务可能会出现死锁。若要增加每个客户端允许的 HTTP
    连接数,请将下面的代码添加到相关配置文件中(例如,相关服务的 web.config):
   1: <configuration>
   2:    <system.net>
   3:       <connectionManagement>
   4:          <add name = "*" maxconnection = "XX" />
   5:       </connectionManagement>
   6:    </system.net>
   7: </configuration>

作者:蒋金楠
微信公众账号:大内老A
微博:www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文链接

时间: 2024-09-13 02:09:20

[转自MSDN]可靠会话(Reliable Session)的最佳实践的相关文章

使命必达: 深入剖析WCF的可靠会话[协议篇](上)

在<实例篇>中,我通过可靠会话实现了对图片的可靠.有序的传输:在<概念篇>中,我们对可靠消息涉及到的可靠消息传输(RM)的相关概念进行了讲述.在WS-*大家庭中,WS-RM为可靠消息传输提供了一个一个规范,使互操作成为可能.在<协议篇>中,我们侧重对WS-RM的介绍. WS-RM,为WS-Reliable Messaging的简称,是WS-*大家庭的一个重要成员.和前面介绍的WS-Coordination和WS-AT一样,WS-RM的制定者是结构化信息标准促进组织(OA

使命必达: 深入剖析WCF的可靠会话[实例篇](内含美女图片,定力差者慎入)

通过前面一系列的博文(<WCF 并发(Concurrency)的本质>.<并发中的同步>.<实践重于理论>.<并发与实例上下文模式>.<回调与并发>.<ConcurrencyMode.Multiple 模式下的WCF服务就一定是并发执行的吗[上篇]>.<ConcurrencyMode.Multiple 模式下的WCF服务就一定是并发执行的吗[下篇]>.<控制并发访问的三道屏障[上篇]>和<控制并发访问的三

使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)

本系列先后通过<实例篇>.<概念篇>.<协议篇>和<编程篇>对WCF的可靠会话进行了详细探讨.作为本系列的最后一片,我们将深入到WCF的可靠会话体系的最底层,对实现可靠会话的实现原理进行深入剖析.如果读者仔细阅读本系列博文,相信会使读者对可靠会话的理解提升到一定的高度. 从<编程篇>中,我们不难看出可靠会话的编程仅仅围绕着一个对象,那就是绑定.绑定在整个WCF架构模型具有重要的地位.WCF整个架构模型由两部分构成,即服务模型(Service Mo

使命必达: 深入剖析WCF的可靠会话[概念篇]

在<实例篇>中,我通过可靠会话成功地进行了美女图片的传输,相信大家在保了眼福之余,会对WCF的可靠会话的功用具有一个深刻的认识.实际上,这涉及到WS中一个重要的概念--可靠消息传输(RM:Reliable Messaging).如果想对可靠会话有一个深入的认识,对可靠消息传输的了解是必须的. 一.可靠消息传输(Reliable Messaging) 我们可以将一个通过WCF构建的分布式应用划分为两个部分,即客户端应用和服务端应用,它们之间的交互方式即采用某种MEP的消息交换.在这里,我们需要通

使命必达: 深入剖析WCF的可靠会话[共8篇]

作为一个通信基础平台,WCF必须保证通信的可靠性.由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输.WCF本质上是一个消息处理框架,作为整个消息交换系统的两个终端,即发送端和接收端.换句话说,WCF仅仅负责对消息的发送和接收,一旦消息通过WCF的信道层进入了网络,就脱离了WCF的控制范围.但是,由于网络环境的限制,网络层不能百分之百地确保对消息的有效交付.如何克服中间环节的制约,确保从一端发送的消息能够被有效地交付给另一端,这就是可靠消息传输(Reliable Mes

一起谈.NET技术,使命必达:深入剖析WCF的可靠会话

作为一个通信基础平台,WCF必须保证通信的可靠性.由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输.WCF本质上是一个消息处理框架,作为整个消息交换系统的两个终端,即发送端和接收端.换句话说,WCF仅仅负责对消息的发送和接收,一旦消息通过WCF的信道层进入了网络,就脱离了WCF的控制范围.但是,由于网络环境的限制,网络层不能百分之百地确保对消息的有效交付.如何克服中间环节的制约,确保从一端发送的消息能够被有效地交付给另一端,这就是可靠消息传输(Reliable Mes

PHP会话控制:Session与Cookie详解_php实例

本文介绍了PHP会话控制,主要阐述以下几点内容: • 会话控制的产生背景/概念 • cookie的维护与生命周期(有效时间) • session的维护与生命周期(回收机制) • cookie与session之间的区别与联系 • 问题1:禁用cookie后session为什么会失效? • 问题2:IE浏览器下丢失session,每次刷新页面,都会生成新的sessionID(Firefox浏览器正常) • session.cookie简单实例 理解会话控制的概念 理解一个概念就需要理解他的背景及产生

WCF中关于可靠会话的BUG!!

对WCF的可靠会话编程有一定了解的人应该知道,我们可以使用 DeliveryRequirementsAttribute 可以指示WCF确认绑定提供服务或客户端实现所需的功能.如果在从应用程序配置文件加载服务说明或在代码中以编程方式生成服务说明时检测到 DeliveryRequirementsAttribute 属性,则 WCF 会验证所配置的绑定,并支持该属性指定的所有功能.例如,您的服务可能要求绑定支持队列.使用 DeliveryRequirementsAttribute 可以让WCF 确认是

使命必达: 深入剖析WCF的可靠会话[编程篇](下)

整个可靠会话的机制是完全在信道层实现的,而整个信道层的最终缔造者就是绑定,所以可靠会话编程是围绕着绑定进行的.<上篇>对实现可靠会话的绑定元素已经如何使用系统绑定实现可靠会话进行了介绍,下篇将和你探讨WCF可靠会话编程模型余下两个主题:自定义绑定和对消息传递的强制约束. 一.为自定义绑定的可靠会话进行设置 绑定是一系列绑定元素的有序组合,但是系统绑定为我们提供适应了某种典型通信环境的绑定元素组合方式,可以看成是"套餐".但是,如果套餐不符合您的胃口,你应该查看菜单点你喜欢的