整个可靠会话的机制是完全在信道层实现的,而整个信道层的最终缔造者就是绑定,所以可靠会话编程是围绕着绑定进行的。《上篇》对实现可靠会话的绑定元素已经如何使用系统绑定实现可靠会话进行了介绍,下篇将和你探讨WCF可靠会话编程模型余下两个主题:自定义绑定和对消息传递的强制约束。
绑定是一系列绑定元素的有序组合,但是系统绑定为我们提供适应了某种典型通信环境的绑定元素组合方式,可以看成是“套餐”。但是,如果套餐不符合您的胃口,你应该查看菜单点你喜欢的菜肴。自定义绑定给了你最大的自由度,是能能够根据具体的通信环境自由组合需要的绑定元素。
关于可靠会话,如果你采用系统绑定,你定制的范围其实很窄(仅限于InactivityTimeout和Ordered属性)。但是,如果你采用自定义绑定,由于你操作的对象就是ReliableSessionBindingElement绑定元素,所有你可以对所有的选项进行自由配置。虽然我们可以通过编程的方式之间将创建的ReliableSessionBindingElement对象添加到绑定的绑定元素集合中,但是我们还是强烈建议你通过配置的方式来对可靠会话的相关选项进行定制。为了让读者能够了解某个特性的配置,我个人觉得最好的办法就是直接让读者看看相关配置节的定义。WCF将ReliableSessionBindingElement的配置定义在如下所示的ReliableSessionElement类型中。通过ReliableSessionElement,你不但可以了解可靠会话相关的配置属性,还可以了解到其他相关的配置信息,比如最大值、最小值和默认值等。你可以验证一下它们是否和我们前面的介绍一致。
class ReliableSessionElement : BindingElementExtensionElement
2: {
)]
public TimeSpan AcknowledgementInterval { get; set; }
override Type BindingElementType { get; }
true)]
bool FlowControlEnabled { get; set; }
)]
public TimeSpan InactivityTimeout { get; set; }
, DefaultValue=4)]
int MaxPendingChannels { get; set; }
, DefaultValue=8)]
int MaxRetryCount { get; set; }
, DefaultValue=8), IntegerValidator(MinValue=1, MaxValue=0x1000)]
int MaxTransferWindowSize { get; set; }
true)]
bool Ordered { get; set; }
override ConfigurationPropertyCollection Properties { get; }
)]
public ReliableMessagingVersion ReliableMessagingVersion { get; set; }
21: }