WCF学习笔记(六)自定义绑定和C/S之间传输流的绑定

来源:互联网 发布:刘瑞阳 人工智能 编辑:程序博客网 时间:2024/05/03 01:42

1.自定义绑定

<system.serviceModel>
    <services>
      <service name="WCFBinding.HelloWcf" behaviorConfiguration="">
        <endpoint address="" binding="customBiding" contract="WCFBinding.IHelloWcfService"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="
http://www.yoyo.com"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <customBinding>
        <binding name="customBiding">
          <transactionFlow transactionProtocol="WSAtomicTransactionOctober2004"/>
          <!--
          1.InActivityTimeout

            文档中的说明是:获取或设置服务在关闭之前保持非活动状态的时间间隔。

            说白了一点呢,就是如果服务停留多长时间没有工作,那我们就关闭他(嘿嘿,有点像公司对待员工一样,偶 尔休息一下子,不干活还行,时间长了,老板会炒你鱿鱼的哦!)

            2.Ordered

            文档中说明为:获取或设置一个值,该值指示消息传递是否必须保持与消息发送一致的顺序。

            任何一方,无论是客户端发送请求消息(Request Message),还是服务端发送相应消息(Response Message)。发送出来的消息都有先后次序,而接收方在接收这些消息的时候,有时候会出现错位的现象,有的消息可能后发先至,而有的可能先发后至,这就影响了通讯双方正常的交互。产生这样现象的主要的原因有两点:

            1)未使用可靠连接协议,使得在传输层中出现类似现象

            2)虽然试用了可靠连接协议,但在发送端或者接收端的通道中(Channel)发送或者接收有顺序问题

            tcp协议用于解决第一个问题,而ReliabelSession的Ordered正可以解决第二个问题

          -->
          <reliableSession ordered="true"/>
          <binaryMessageEncoding />
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="servicebehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

2.服务器传输流道客户端

<services>
    <service name="WCFBinding.HelloWcf" behaviorConfiguration="serviceBehavior">
      <endpoint address="HelloWcf1" contract="MediaManagerService.IHelloWcf1" binding="basicHttpBinding" />
      <endpoint address="HelloWcf2" contract="MediaManagerService.IHelloWcf2" binding="basicHttpBinding" bindingConfiguration="basicHttpStreaming"/>
      <endpoint address="HelloWcf2" contract="MediaManagerService.IHelloWcf2" binding="netTcpBinding" bindingConfiguration="netTcpStreaming"/>
      <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      <host>
        <baseAddresses>
          <add baseAddress="
http://localhost:8080"/>
          <add baseAddress="net.tcp://localhost:8090"/>
        </baseAddresses>
      </host>
    </service>
  </services>
  <bindings>
    <netTcpBinding>
      <binding name="netTcpStreaming" transferMode="StreamedRequest" maxReceivedMessageSize="500000" maxBufferSize="1024" sendTimeout="00:00:30" >
      </binding>
    </netTcpBinding>
    <basicHttpBinding>
      <binding name="basicHttpStreaming" messageEncoding="Mtom" maxReceivedMessageSize="500000" transferMode="Streamed">
      </binding>
    </basicHttpBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior name="serviceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>