WCF – 服务绑定

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 服务 (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 绑定使用命名管道并由 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 Dual Binding – 这种类型的绑定更像 WSHttpBinding,唯一的例外是它促进双向通信,即客户端和服务都可以发送和接收消息。它由 WSDualHttpBinding 类提供。

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

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

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

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

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

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁