zoukankan      html  css  js  c++  java
  • 重温WCF之WCF中可靠性会话(十四)

    1.WCF中可靠性会话在绑定层保证消息只会被传输一次,并且保证消息之间的顺序。当使用TCP(Transmission Control Protocol,传输控制协议)通信时,协议本身保证了可靠性。
    然而,它只在两点之间的网络包这个层面提供了这样的保证。WCF的可靠性会话特性保证了在传输过程中消息不会丢失、重复或错位。这种保证是消息层面的,而且适用于任何数目
    节点的通信。另外,使用可靠性会话时,WCF会重连掉线的连接,在重连失败时还会释放会话占用的相关资源。可靠性会话还会通过调整消息的发送频率来缓解网络拥挤。

    可靠性会话主要解决以下几个问题:
    确保消息可靠交付(消息不会丢失、重复或错位)
    确保消息单一性(消息只会被传送一次)
    确保消息有序性(确定消息之间的传输顺序)

    系统有多个绑定支持可靠性会话功能:wsHttpBinding、wsDualHttpBinding、wsFederationBinding、netTcpBinding、netNamedPipesBinding。
    其中wsHttpBinding、wsFederationBinding、netTcpBinding在默认情况下可靠性会话功能是关闭。而wsDualHttpBinding、netNamedPipesBinding则默认支持可靠性功能。

    2.reliableSession 属性
    1.enable

    返回值为bool类型,代表是否打开可靠性功能。

    2.inactivityTimeout

    返回值为TimeSpan类型,代表闲置超时时间,默认值为10分钟,如果客户端已经建立起服务对象,在超过此时间内没有重新调用这些对象,系统将发送提示信息: “通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于‘出错’状态。”。

    3.ordered

    返回值为bool类型,代表是否开启“有序性”性功能,如果开启此功能,代表消息将按顺序传送。

    4.maxPendingChannels

    返回值为int 类型,代表最大等候信道,默认值为4。

    5.maxRetryCount

    返回值为int 类型,表示最大重复发送次数,默认值为8,最大值为20。如果因断线等原因连接失败,客户端重试次数超过此最大值,系统将发出错误提示。

    6.flowControlEnabled

    返回值为bool类型,默认值为true,代表是否启动流量控制器。启动后,当接收方的传输数据缓冲区已满时,发送方将延迟发送信息。

    7.acknowledgementInterval

    返回值为TimeSpan类型,默认值为00:00:00.2(即0.2秒),代表接收方在接收信息之前所需要的等待时间。

    8.maxTransferWindowSize

    返回值为int类型,默认值为8,用于控制数据缓冲区数量。

    <configuration>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="">
              <serviceMetadata httpGetEnabled="false" />
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
        <bindings>
          <netTcpBinding>
            <binding name="defaultNetTcpBinding">
              <!--打开可靠性会话功能,把过期时间配置为10秒-->
              <reliableSession enabled="true" inactivityTimeout="00:00:10"/>
            </binding>
          </netTcpBinding>
        </bindings>
    
        <services>
          <service name="Pro.Service.PersonService">
            <!--绑定defaultNetTcpBinding-->
            <endpoint address=""  bindingConfiguration="defaultNetTcpBinding" binding="netTcpBinding" contract="Pro.Service.IPersonService">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="net.Tcp://localhost:6000/Pro.Service/PersonService/" />
              </baseAddresses>
            </host>
          </service>
        </services>
      </system.serviceModel>
    </configuration>


    WCF为我们提供了可靠消息传递的有效机制,这个特性也是基于已有网络传输协议,WCF再次基础 上多数据通信模型进行了扩展。这种特性确实对增强我们程序的数据传递的准确性有很大的帮助,但是是否使用可靠消息传递要基于实际的项目需要,不能强制使 用。我们获得安全可靠性的同时,实际底层付出的是效率的代码。

  • 相关阅读:
    stm32的hal之串口库函数总结复习
    关闭win10 任务栏窗口预览的步骤:
    sizeof的注意点
    goto语句——慎用,但是可以用
    #define的一个小技巧
    Chapter 1 First Sight——36
    Chapter 1 First Sight——35
    Chapter 1 First Sight——34
    leetcode409
    Chapter 1 First Sight——34
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4277634.html
Copyright © 2011-2022 走看看