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- 可靠訊息,WS- 事務,WS- 安全,還有更多。簡而言之,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 Binding - 由NetTcpBinding類結合TCP協定的通訊在同一網路內,並且不會以二進位制格式資訊編碼。這種結合被認為是最可靠的對比。

  • WS Dual Binding - 這種結合便於雙向通訊,即訊息可以被傳送和接收的用戶端和服務的唯一例外的是wsHttpBinding。這是由WSDualHttpBinding類提供的。

  • Web binding - 這種結合被設計為表示WCF服務中的HTTP請求的形式,通過使用HTTP的GET和HTTP的POST等方式,這是可用的WebHttpBinding類,並與社會網路常用。

  • MSMQ Binding - 這個系結由NetMsmqBinding類,還提供用於提供在情況下,服務於一個不同於用戶端傳送的處理訊息時間的解決方案。這種結合使得使用MSMQ傳輸,並提供支援的訊息佇列。 MSMQ是微軟提供的佇列訊息實現。

  • Federated WS Binding - 這種結合是由WSFederationHttpBinding類提供。這是WS結合的一種具體形式,並提供支援,以聯合安全。

  • Peer Network Binding - 由NetPeerTCPBinding類提供,該結合主要是用在檔案共用系統,例如種子和TCP協定中使用。它使用TCP協定等網路運輸。在這個網路中每個機器(節點)充當用戶端和一個伺服器到另一個節點。這是用在像奔流的檔案共用系統。

  • MSMQ Integration binding - 這種結合是由MsmqIntegrationBinding類提供的。這種結合提供支援MSMQ(微軟訊息佇列),使現有通訊系統進行通訊。

除了這些,還可以建立自定義係結。然而,由於它能夠調整每個WCF組態屬性系結,需要建立自定義系結的產生極少。