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 Binding 默认设置的代码片段 −

<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 等以 HTTP 请求的形式表示 WCF 服务。它由 WebHttpBinding 类提供,并常用于社交网络。

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

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

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

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

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