本頁是否能提供幫助?
您對此內容的意見反應十分重要。 請告訴我們您的想法。
其他意見反應?
剩餘 1500 個字元
Bindings

服務匯流排繫結

更新日期: 2015年5月

SDK 包含一組 WCF 繫結,可利用 WCF 提供的轉送服務,讓 服務匯流排 服務與用戶端之間的整合自動進行。在大多數情況下,您只需使用其中一個 服務匯流排「轉送」繫結來取代目前使用的 WCF 繫結。

下表列出所有的 服務匯流排 WCF 繫結,以及它們對應的標準 WCF 繫結。最常使用的 WCF 繫結,例如 System.ServiceModel.BasicHttpBindingWebHttpBindingSystem.ServiceModel.WS2007HttpBindingSystem.ServiceModel.NetTcpBinding,都有名稱十分類似的對應 服務匯流排 繫結 (只差在 “Binding” 前插入 “Relay”)。僅有小部分的轉送繫結,例如 Microsoft.ServiceBus.NetOnewayRelayBindingMicrosoft.ServiceBus.NetEventRelayBinding,沒有相對應的 WCF 繫結。

 

標準 WCF 繫結 同等的轉送繫結

System.ServiceModel.BasicHttpBinding

Microsoft.ServiceBus.BasicHttpRelayBinding

System.ServiceModel.WebHttpBinding

Microsoft.ServiceBus.WebHttpRelayBinding

System.ServiceModel.WS2007HttpBinding

Microsoft.ServiceBus.WS2007HttpRelayBinding

System.ServiceModel.NetTcpBinding

Microsoft.ServiceBus.NetTcpRelayBinding

Microsoft.ServiceBus.NetOnewayRelayBinding

Microsoft.ServiceBus.NetEventRelayBinding

轉送繫結的運作方式與標準 WCF 繫結類似。例如,它們支援不同的 WCF 訊息版本 (例如 [SOAP 1.1]、[SOAP 1.2] 及 [無])、各種 WS-* 安全性案例、可靠的訊息、串流處理、中繼資料交換、Web 程式設計模型 (例如,[WebGet] 和 [WebInvoke]),以及其他許多標準的 WCF 功能。只有一些 WCF 功能未支援,包括不可部分完成交易流程與傳輸等級驗證。

如果您熟悉 WCF 的運作方式,可能會有興趣瞭解新繫結 (本主題稍早所示) 如何對應至基本的 WCF 傳輸繫結元素。下表指出每個轉送繫結的傳輸繫結元素。如您所見,此 SDK 包含數個新的 WCF 傳輸繫結元素,包括 Microsoft.ServiceBus.HttpRelayTransportBindingElementMicrosoft.ServiceBus.HttpsRelayTransportBindingElement, Microsoft.ServiceBus.TcpRelayTransportBindingElement 以及 Microsoft.ServiceBus.RelayedOnewayTransportBindingElement

 

轉送繫結 傳輸繫結元素

Microsoft.ServiceBus.BasicHttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.WebHttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.WS2007HttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.NetTcpRelayBinding

Microsoft.ServiceBus.TcpRelayTransportBindingElement

Microsoft.ServiceBus.NetOnewayRelayBinding

Microsoft.ServiceBus.RelayedOnewayTransportBindingElement

Microsoft.ServiceBus.NetEventRelayBinding

Microsoft.ServiceBus.RelayedOnewayTransportBindingElement

這些新的 WCF 原型是最後利用幕後的轉送服務提供低等級通道整合的項目,但是這些詳細資料會隱藏於繫結後面而無法檢視。下列各節將討論主要 WCF 轉送繫結的詳細資料,並顯示如何使用它們。

NetMessagingBinding 繫結可供啟用 WCF 的應用程式用來透過佇列、主題和訂閱傳送和接收訊息。如需詳細資訊,請參閱 NetMessagingBinding

NetOnewayRelayBinding 是所有轉送繫結中限制最多的繫結,因為它僅支援單向訊息。但是,它也會特別針對該案例進行最佳化。儘管這些通訊設定可以透過標準繫結設定技術進行設定,但是根據預設,NetOnewayRelayBinding 繫結會透過 TCP 搭配使用 SOAP 1.2 與二進位編碼的訊息。使用此繫結的服務一律必須使用「sb」通訊協定配置。

在預設設定中使用此繫結時,內部部署的 WCF 服務會嘗試利用轉送服務來建立輸出連線,以建立雙向通訊端。在此情況下,一律會透過輸出連接埠 9351 建立安全的 TCP/SSL 連線。在連線程序期間,WCF 服務會進行驗證 (作法是提供從 存取控制 取得的權杖)、指定要在轉送服務中接聽的名稱,以及告知轉送服務要建立哪種類型的接聽程式。當 WCF 用戶端在預設設定中使用此繫結時,根據繫結設定而定,會利用轉送透過連接埠 9350 (TCP) 或 9351 (TCP/SSL) 來建立 TCP 連線。在連線程序期間,必須藉由提供從 存取控制 取得的權杖來與轉送進行驗證。一旦用戶端成功連線之後,即可開始將單向訊息傳送至要透過其 TCP 連線「轉送」至內部部署服務的 服務匯流排。

如果您將 NetOnewayRelayBinding 繫結安全性模式屬性設定為 Transport,通道將會要求 SSL 保護。在此情況下,所有進出轉送服務的流量都將透過 SSL 受到保護;但是,請務必瞭解訊息將自由通過轉送服務。如果您想要確保完整的隱私權,應使用 Message 安全性模式,在此模式下,您可以將通過轉送服務之訊息中的所有內容加密 (但位址資訊除外)。

NetOnewayRelayBinding 繫結會要求將服務合約上的所有操作標示為單向操作 (IsOneWay=true)。在此情況下,若要使用此 WCF 繫結,請在端點定義上指定它並提供所需的認證。

使用 NetOnewayRelayBinding 時,內部部署 WCF 服務預設會透過 TCP 連線至轉送服務。如果您進行操作所在的網路環境未啟用任何非 HTTP(s) 輸出 TCP 連線,則可設定各種不同的轉送繫結來使用更積極的連線模式,以解決這些限制。若要這麼做,可以設定內部部署 WCF 服務,利用轉送服務來建立 HTTP 連線 (而非 TCP 連線)。服務匯流排 提供您可以使用下列三個的其中一個值來設定的全系統 ConnectivityMode 設定:TcpHttpAutoDetect (請參閱下表)。如果您想要確定服務可透過 HTTP 連線,請將此屬性設定為 Http

 

ConnectivityMode 描述

Tcp

服務會透過連接埠 9351 (SSL),利用轉送服務建立 TCP 連線。

Http

服務會利用轉送服務來建立 HTTP 連線,而能夠更輕易地解決 TCP 連接埠限制。

AutoDetect (預設值)

此模式會根據自動偵測機制,在 TcpHttp 模式之間自動選取,此機制可探查是否可針對目前網路環境使用任一連線選項,而且偏好使用 Tcp

AutoDetect 為預設模式,這表示轉送繫結會自動判斷是要使用 TCP 還是 HTTP,將內部部署服務連線至轉送服務。如果能夠在指定的網路設定上使用 TCP,系統預設會使用該模式 (亦即,它會透過傳送 ping 訊息給連線偵測的 URL 來嘗試使用 TCP)。如果 TCP 連線失敗,即會自動切換為 HTTP 模式。因此,大部分的時間,您都不需要明確設定此屬性,因為預設的「自動偵測」行為會為您決定此行為。您唯一需要明確設定此屬性的時機是當您想要強制執行 TCP 或 HTTP 時。

您可以透過靜態 ServiceBusEnvironment 類別,在 AppDomain 等級上設定連線模式。此類別會提供你可在其中指定本節先前所示之三個 ConnectivityMode 值其中一個的 SystemConnectivity 屬性。下列程式碼將說明如何修改應用程式,以使用 HTTP 連線模式:

...
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;
ServiceHost host = new ServiceHost(typeof(OnewayService), address);
host.Open();
...

系統連線模式設定會在所有轉送繫結上生效。

NetEventRelayBinding 的實作方式非常類似於 NetOnewayRelayBinding 繫結。繫結預設值和安全性選項與 NetOnewayRelayBinding 的完全相同。此外,關於用戶端/服務如何與轉送服務互動的機制基本上是一樣的。事實上,NetEventRelayBinding 類別實際是衍生自 NetOnewayRelayBinding 類別。

NetEventRelayBinding 繫結中的主要差異在於,它可讓您利用相同的 服務匯流排 位址登錄多個 WCF 服務。當用戶端將訊息傳送至這類位址時,轉送服務會將該訊息多點傳送至目前已訂閱該位址的所有內部部署 WCF 服務。

NetEventRelayBinding 繫結支援與 NetEventRelayBinding 相同的 SystemConnectivity 選項。當您在 ServiceBusEnvironment 類別上設定 SystemConnectivity 屬性時,其會對所有端點產生作用。因此,您可以針對所有內部部署 NetEventRelayBinding 端點使用積極型 HTTP 連線模式,但前提是它們是裝載於封鎖輸出 TCP 連線的鎖定網路環境。

NetTcpRelayBinding 繫結支援雙向訊息語意,並與標準 WCF NetTcpBinding 緊密整合 - 主要差異為 NetTcpRelayBinding 會在轉送服務中建立可公開到達的 TCP 端點。

根據預設,NetTcpRelayBinding 繫結支援透過 TCP 的 SOAP 1.2,並使用二進位序列化來取得效率。即使它的設定與 NetTcpBinding 的設定非常類似,但是它們的基本 TCP 通訊端層並不相同,因此它們彼此之間無法直接相容。這表示用戶端應用程式也必須設定為使用 NetTcpRelayBinding 才能整合。

首先,內部部署 WCF 服務會建立與轉送服務之間的安全輸出 TCP 連線。在此程序處理期間,它必須進行驗證、指定要接聽的位址,以及指定要在轉送中建立的接聽程式類型。到目前為止,它與 NetOnewayRelayBinding 繫結非常類似。當輸入訊息到達其中一個前端節點時,控制訊息接著會往下路由至內部部署 WCF 服務,指出如何利用用戶端前端節點往回建立會合連線。這會建立直接的通訊端對通訊端轉寄站,以轉送 TCP 訊息。

NetTcpRelayBinding 繫結支援兩種連線模式 (請參閱 TcpRelayConnectionMode),可控制用戶端和服務如何透過轉送服務彼此通訊 (請見下表)。

 

TcpConnectionMode 描述

Relayed (預設值)

所有通訊都是透過轉送服務進行轉送。SSL 保護的控制連線可用來交涉所有通訊流經的端對端通訊端轉送連線。一旦連線建立之後,轉送服務會作為用來轉送雙向位元組串流的通訊端轉寄站 Proxy。

Hybrid

當用戶端/服務彼此交涉直接通訊端連線時,初始通訊會透過轉送服務基礎架構來轉送。此直接連線的協調是由轉送服務所控管。直接通訊端連線演算法可在位於對面防火牆和 NAT 裝置後面的兩方之間建立直接連線。演算法只會使用輸出連線來進行防火牆周遊,並依賴相互連接埠預測演算法來進行 NAT 周遊。一旦能夠建立直接連線之後,即會自動將轉送的連線升級至直接連線,而不會遺失任何訊息或資料。如果無法建立直接連線,資料將繼續如往常般流經轉送服務。

雖然 Hybrid 模式會指示轉送服務在用戶端與服務應用程式之間建立直接連線,但 Relayed 模式才是預設模式。因此,沒有任何資料必須通過轉送。這會被視為「混合」模式,因為它是在嘗試升級為直接連線時,透過轉送以轉送資訊來啟動。如果成功,將切換為直接連線,而不會遺失任何資料。如果無法建立直接連線,將繼續使用轉送服務。當您必須設定內部部署服務,以便透過 HTTP 連線至轉送服務時,NetTcpRelayBinding 繫結也支援 SystemConnectivity 功能。當您設定 SystemConnectivity 屬性時,其會對所有端點產生作用。因此,您可以針對所有內部部署 NetTcpRelayBinding 端點使用積極型 HTTP 連線模式,但前提是它們是裝載於封鎖輸出 TCP 連線的鎖定網路環境。

討論至目前為止的所有繫結都會要求用戶端在互動的用戶端上使用 WCF。當您需要非 WCF 的用戶端來與 服務匯流排 端點整合時,可藉由選取各種 HTTP 轉送繫結之一來支援轉送以 HTTP 為基礎的訊息。

服務匯流排 包括數種 HTTP 繫結 - WebHttpRelayBindingBasicHttpRelayBindingWS2007HttpRelayBinding。這些 HTTP 繫結可提供更為廣泛的範圍及更多的互通性,因為它們可以支援所有知道如何使用這其中每一個繫結所支援之標準通訊協定的用戶端。因為 WebHttpRelayBindingBasicHttpRelayBinding 分別是以 HTTP/REST 和基本 SOAP 為基礎,所以可提供最大的範圍。WS2007HttpRelayBinding 繫結可透過 WS-* 通訊協定提供其他層級的功能。使用 WS2007HttpRelayBinding 繫結時,用戶端必須支援同一組已在端點上啟用的 WS-* 通訊協定。

無論您使用的是哪一種 HTTP 轉送繫結,在轉送服務中發生之項目的機制大都相同。內部部署 WCF 服務會根據所使用的 ConnectivityMode 設定,利用轉送服務來優先建立 TCP 或 HTTP 連線。ConnectivityMode 功能在所有 HTTP 轉送繫結上的運作方式相同。接著,用戶端會開始將訊息傳送至轉送服務公開的 HTTP 端點。這表示用戶端上不再需要 WCF - 所有與 HTTP/SOAP 相容的程式庫都將執行此動作。當輸入訊息到達其中一個前端節點時,控制訊息接著會路由至服務,指出如何利用用戶端前端節點往回建立會合連線。這會建立直接的 HTTP 對通訊端轉寄站,以轉送 HTTP 訊息。

轉送服務會知道如何明確地路由 SOAP 1.1、SOAP 1.2 及純 HTTP (REST) 訊息。您可以藉由設定其中一個 HTTP 轉送繫結 (就像您針對任何其他 WCF 繫結所做的),來控制要使用的訊息樣式及各種 WS-* 通訊協定。

顯示:
© 2015 Microsoft