WCF - 服务绑定



WCF服务绑定是一组多个元素,每个元素定义服务与客户端通信的方式。传输元素和消息编码元素是每个绑定的两个最重要的组成部分。本章将讨论一些常用的WCF服务绑定。

基本绑定

基本绑定由BasicHttpBinding类提供。它使用HTTP协议传输并将WCF服务表示为ASP.NET Web服务(ASMX Web服务),以便使用ASMX Web服务的旧客户端可以方便地使用新服务。

基本绑定在Silverlight启用的WCF Web服务中被设置为默认绑定,是Web服务样式通信的标准绑定。它不支持可靠消息传递。

以下是显示基本绑定默认设置的代码片段。

<basicHttpBinding>
   <binding name = "basicHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxBufferSize = "65536" 
      maxReceivedMessageSize = "65536" messageEncoding = "Text" proxyAddress = "" 
      textEncoding = "utf-8" transferMode = "Buffer" useDefaultWebProxy = "true" 
      closeTimeout = "00:01:00" openTimeout = "00:01:00" receiveTimeout = "00:10:00" 
      sendTimeout = "00:01:00">
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32"
         maxNameTableCharCount = "16384" maxStringContentLength = "8192"/>

      <security mode = "None">
         <transport clientCredentialType = "None" proxyCredentialType = "None" realm = ""/>
         <message algorithmSuite = "Basic256" clientCredentialType = "UserName" />
      </security>       
   </binding>

</basicHttpBinding>        	

上述默认设置有其明显的局限性,例如消息大小有限制且没有安全模式。但是,自定义基本绑定可以解决这个问题,如下所示。

<basicHttpBinding>
   <binding name = "basicHttpSecure" maxBufferSize = "100000" maxReceivedMessageSize = "100000">
   
      <readerQuotas maxArrayLength = "100000" maxStringContentLength = "100000"/>
      <security mode = "TransportWithMessageCredential" />
     
   </binding>
</basicHttpBinding>

Web服务绑定

Web服务(WS)绑定由WSHttpBinding类提供。它与基本绑定非常相似,并使用相同的协议进行传输,但提供了几个WS-*规范,例如WS-Reliable Messaging、WS-Transactions、WS-Security等等。简而言之,WSHttpBinding等于basicHttpBinding和WS-*规范的总和。以下是显示WS绑定的默认设置的代码片段:

<wsHttpBinding>
   <binding name = "wsHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxReceivedMessageSize = "65536" 
      messageEncoding = "Text" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" proxyAddress = "" sendTimeout = "00:01:00" 
      textEncoding = "utf-8" transactionFlow = "false" 
      useDefaultWebProxy = "true" > 
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = ."4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>

      <reliableSession enabled = "false" ordered = "true" 
         inactivityTimeout = "oo:10:00" /> 

      <security mode = "Message">
         <message algorithmSuite = "Basic256" clientCredentialType = "Windows" 
            esatalishSecurityContext = "true" 
            negotiateServiceCredential = "true" />

         <transport clientCredentialType = "Windows"
            proxyCredentialType = "None" realm = ""/>        	
      </security>
      
   </binding>
</wsHttpBinding>

IPC绑定

IPC绑定使用命名管道,由netNamedPipeBinding类提供。这是所有可用绑定中最快、最安全的绑定。虽然这里不支持消息级安全性,但由于强大的传输安全性,消息默认是安全的。以下是显示IPC绑定默认设置的代码片段:

<netNamedPipeBinding>
   
   <binding name = "netPipeDefaults" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "524288" 
      maxBufferSize = "65536" maxConnections = "10" 
      maxReceivedMessageSize = "65536" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" sendTimeout = "00:01:00" transactionFlow = "false" 
      transactionProtocol = "OleTransactions" transferMode = "Buffered">  

      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>
   
      <security mode = "Transport">        	
      </security>
      
   </binding>
</netNamedPipeBinding>

其他类型的服务绑定

  • TCP绑定 - 由NetTCPBinding类提供,此绑定使用TCP协议在同一网络内进行通信,并以二进制格式进行消息编码。与其他绑定相比,此绑定被认为是最可靠的。

  • WS双向绑定 - 此类型的绑定类似于WSHttpBinding,唯一的例外是它支持双向通信,即客户端和服务都可以发送和接收消息。它由WSDualHttpBinding类提供。

  • Web绑定 - Web绑定旨在通过使用HTTP-GET、HTTP-POST等将WCF服务表示为HTTP请求的形式。它由WebHttpBinding类提供,通常与社交网络一起使用。

  • MSMQ绑定 - 它由NetMsmqBinding类提供,用于在服务在不同于客户端发送消息的时间处理消息的情况下提供解决方案。MSMQ绑定使用MSMQ进行传输,并支持脱机消息队列。MSMQ是Microsoft提供的消息队列的实现。

  • 联合WS绑定 - 它是WS绑定的特定形式,并支持联合安全性。它由WSFederationHttpBinding类提供。

  • 对等网络绑定 - 由NetPeerTCPBinding类提供,主要用于文件共享系统。它使用TCP协议,但使用对等网络作为传输。在此网络中,每台机器(节点)都充当其他节点的客户端和服务器。对等网络绑定用于诸如torrent之类的文件共享系统。

  • MSMQ集成绑定 - 由MsmqIntegrationBinding类提供,它有助于与通过MSMQ(Microsoft消息队列)进行通信的现有系统进行通信。

除此之外,还可以创建自定义绑定。但是,由于可以调整每个WCF绑定的配置属性,因此很少需要创建自定义绑定。

广告
© . All rights reserved.