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>
這是通過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>
這種結合使得使用命名管道,由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組態屬性系結,需要建立自定義系結的產生極少。