<ReliableSession>

定义 WS-Reliable 消息传送的设置。 将此元素添加到自定义绑定时,生成的通道可以完全支持一次传递保证。

<配置>
   <system.serviceModel>
     <绑定>
       <customBinding>
         <捆绑>
           <ReliableSession>

Syntax

<reliableSession acknowledgementInterval="TimeSpan"
                 flowControlEnabled="Boolean"
                 inactivityTimeout="TimeSpan"
                 maxPendingChannels="Integer"
                 maxRetryCount="Integer"
                 maxTransferWindowSize="Integer"
                 reliableMessagingVersion="Default/WSReliableMessagingFebruary2005/WSReliableMessaging11"
                 ordered="Boolean" />

特性和元素

下列各节描述了特性、子元素和父元素。

特性

Attribute Description
acknowledgementInterval 一个 TimeSpan 包含通道要等待的最大时间间隔,以发送接收到该点的消息的确认。 默认值为 00:00:0.2。
flowControlEnabled 一个布尔值,指示是否已激活高级流控制(WS-Reliable 消息传送的流控制Microsoft特定实现)。 默认值为 true
inactivityTimeout 指定 TimeSpan 通道在出错之前允许其他通信方不发送任何消息的最大持续时间。 默认值为 00:10:00。

通道上的活动定义为接收应用程序或基础结构消息。 此属性控制保持非活动会话活动的最大时间量。 如果时间较长且没有活动,则基础结构和通道故障会中止会话。 注意: 应用程序不需要定期发送消息以使连接保持活动状态。
maxPendingChannels 一个整数,指定可等待侦听器接受的最大通道数。 此值应介于 1 到 16384 之间(含)。 默认值为 4。

等待接受通道时,通道处于挂起状态。 达到该限制后,不会创建通道。 相反,它们处于挂起模式,直到此数字关闭(通过接受挂起的通道)。 这是每个工厂的限制。

达到阈值并且远程应用程序尝试建立新的可靠会话时,请求将被拒绝,并且打开的作会提示出现此错误。 此限制不适用于挂起的传出通道数。
最大重试次数 一个整数,该整数指定可靠通道尝试通过在其基础通道上调用 Send 来重新传输它未收到其确认的消息的最大次数。

此值应大于零。 默认值为 8。

此值应为大于零的整数。 如果在上次重新传输后未收到确认,通道会出错。

如果收件人已确认邮件在收件人的送达,则被视为要转移邮件。

如果已传输的消息在一定时间内未收到确认,则基础结构会自动重新传输消息。 基础结构尝试为此属性指定的最多次数重新发送消息。 如果在上次重新传输后未收到确认,通道会出错。

基础结构使用指数退避算法根据计算的平均往返时间来确定何时重新传输。 时间最初从 1 秒开始,然后重新传输,并在每次尝试时加倍延迟,这会导致在第一次传输尝试与最后一次重新传输尝试之间传递大约 8.5 分钟。 第一次重新传输尝试的时间根据计算的往返时间进行调整,并且这些尝试所花费的时间会相应地变化。 这样,重新传输时间就可以动态适应不同的网络条件。
maxTransferWindowSize 一个整数,指定缓冲区的最大大小。 有效值为 1 到 4096(含)。

在客户端上,此属性定义可靠通道用于保存接收方尚未确认的消息的最大缓冲区大小。 配额单位是一条消息。 如果缓冲区已满,则会阻止进一步的 SEND作。

在接收方上,此属性定义通道用于存储尚未调度到应用程序的传入消息的最大缓冲区大小。 如果缓冲区已满,则接收方会以无提示方式删除进一步的消息,并要求客户端重新传输。
ordered 一个布尔值,指定是否保证消息按发送顺序到达。 如果此设置是 false,则消息可以无序到达。 默认值为 true
ReliableMessagingVersion 一个有效值 ReliableMessagingVersion ,该值指定要使用的 WS-ReliableMessaging 版本。

子元素

None

父元素

元素 Description
<捆绑> 定义自定义绑定的所有绑定功能。

注解

可靠会话提供可靠消息传送和会话的功能。 可靠消息传送在失败时重试通信,并允许指定传递保证,例如消息的有序到达。 会话在调用之间保持客户端的状态。 此元素还可以选择提供有序的消息传递。 此实现的会话可以跨 SOAP 和传输中介。

每个绑定元素表示发送或接收消息时的处理步骤。 在运行时,绑定元素创建生成发送和接收消息所需的传出通道堆栈和传入通道堆栈所需的通道工厂和侦听器。 堆栈 reliableSession 中提供了一个可选层,可在终结点之间建立可靠的会话并配置此会话的行为。

有关详细信息,请参阅 Reliable Sessions

Example

以下示例演示如何使用各种传输和消息编码元素配置自定义绑定,特别是启用可靠会话,该会话维护客户端状态并指定有序传递保证。 此功能在客户端和服务的应用程序配置文件中配置。 该示例显示服务配置。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">
        <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
        <!-- specify customBinding binding and a binding configuration to use -->
        <endpoint address=""
                  binding="customBinding"
                  bindingConfiguration="Binding1"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <!-- custom binding configuration - configures HTTP transport, reliable sessions -->
    <bindings>
      <customBinding>
        <binding name="Binding1">
          <reliableSession />
          <security authenticationMode="SecureConversation"
                    requireSecurityContextCancellation="true">
          </security>
          <compositeDuplex />
          <oneWay />
          <textMessageEncoding messageVersion="Soap12WSAddressing10"
                               writeEncoding="utf-8" />
          <httpTransport authenticationScheme="Anonymous"
                         bypassProxyOnLocal="false"
                         hostNameComparisonMode="StrongWildcard"
                         proxyAuthenticationScheme="Anonymous"
                         realm=""
                         useDefaultWebProxy="true" />
        </binding>
      </customBinding>
    </bindings>
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata httpGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

另请参阅