路由服務是一般 SOAP 媒介,可作為訊息路由器。 路由服務的核心功能是能夠根據訊息內容來路由傳送訊息,這可讓訊息根據其值轉送至用戶端端點,該值可位於訊息的標頭或訊息本文中。
RoutingService 是在 System.ServiceModel.Routing 命名空間中實作為 Windows Communication Foundation (WCF) 服務。 路由服務會公開一或多個接收訊息的服務端點,然後根據訊息內容,將每個訊息路由傳送至一或多個用戶端端點。 此服務提供下列功能:
以內容為基礎的路由
- 服務整合
- 服務版本控制
- 優先順序路由
- 動態組態
通訊協定橋接
SOAP 處理
進階錯誤處理
備份端點
雖然可以建立可達成其中一或多個目標的中繼服務,但這類實作通常會系結至特定案例或解決方案,且無法輕易套用至新的應用程式。
路由服務提供與 WCF 服務和通道模型相容的一般、可動態設定的插入式 SOAP 媒介,並可讓您執行以內容為基礎的 SOAP 訊息路由。
備註
路由服務目前不支援 WCF REST 服務的路由。 若要路由傳送 REST 呼叫,請考慮使用 System.Web.Routing 或 應用程式要求路由。
內容型路由
以內容為基礎的路由是能夠根據訊息中包含的一或多個值來路由訊息。 路由服務會檢查每個訊息,並根據您所建立的訊息內容和路由邏輯,將它路由傳送至目的地端點。 內容型路由提供服務匯總、服務版本設定和優先順序路由的基礎。
為了實作內容型路由,路由服務會依賴 MessageFilter 實作,這些實作可用來比對要路由傳送之訊息中的特定值。 如果 MessageFilter 符合訊息,訊息會路由傳送至與 MessageFilter 相關聯的目的地端點。 訊息篩選會分組為篩選數據表 (FilterTableCollection),以建構複雜的路由邏輯。 例如,篩選數據表可能包含五個互斥訊息篩選,導致訊息路由至五個目的地端點的其中一個。
路由服務允許您配置用於執行內容導向路由的邏輯,並在執行時動態更新路由邏輯。
透過將訊息篩選分組到篩選數據表中,可以建構路由邏輯,讓您處理多個路由案例,例如:
- 服務整合
- 服務版本控制
- 優先順序路由
- 動態組態
如需訊息篩選和篩選數據表的詳細資訊,請參閱 路由簡介 和 訊息篩選。
服務匯總
藉由使用以內容為基礎的路由,您可以公開一個端點,以接收來自外部用戶端應用程式的訊息,然後根據訊息中的值,將每個訊息路由傳送至適當的內部端點。 這適用於為各種後端應用程式提供一個特定端點,並同時向客戶呈現一個應用程式端點,同時將應用程式分解成各種服務。
服務版本控制
移轉至新版解決方案時,您可能必須以平行方式維護舊版,才能為現有客戶提供服務。 這通常需要連線到較新版本的用戶端在與解決方案通訊時,必須使用不同的位址。 路由服務可讓您根據訊息中包含的版本特定資訊,將訊息路由至適當的解決方案,以公開一個服務端點,以提供這兩個解決方案版本。 如需這類實作的範例,請參閱 How To: Service Versioning。
優先順序路由
為多個客戶提供服務時,您可能會與一些合作夥伴訂立服務等級協定(SLA),要求從這些合作夥伴獲得的所有數據必須與其他客戶的數據分開處理。 藉由使用篩選來尋找訊息中包含的客戶特定資訊,您可以輕鬆地將訊息從特定合作夥伴路由傳送至已建立以符合其 SLA 需求的端點。
動態設定
為了支援任務關鍵系統,訊息必須在無服務中斷的情況下處理,您必須能在執行時修改系統內元件的配置。 為支援此需求,路由服務提供了 IExtension<T> 實作 , RoutingExtension允許在執行時動態更新路由服務設定。
如需路由服務動態設定的詳細資訊,請參閱 路由簡介。
通訊協定橋接
中繼案例中的其中一個挑戰是,內部端點可能有不同的傳輸或SOAP版本需求,而不是接收訊息的端點。 為了支援此案例,路由服務可以橋接通訊協定,包括將 SOAP 訊息處理為目的地端點所需的格式。 如此一來,一個通訊協定就可以用於內部通訊,而另一個通訊則可用於外部通訊。
為了在具有不同傳輸方式的端點之間路由傳送訊息,路由服務使用系統提供的繫結設定,使服務能夠橋接不相容的通訊協定。 當路由服務公開的服務端點使用與訊息路由傳送至的用戶端端點不同的通訊協定時,就會自動發生此情況。
SOAP 處理
常見的路由需求是能夠在具有不同SOAP需求的端點之間路由訊息。 為了支援這項需求,路由服務會提供 SoapProcessingBehavior ,其會自動建立符合目的地端點需求的新 MessageVersion ,再將訊息路由傳送至目的地端點。 此行為也會為任何回應訊息建立新的 MessageVersion ,再將它傳回給要求的用戶端應用程式,以確保回應的 MessageVersion 符合原始要求的 MessageVersion 。
如需SOAP處理的詳細資訊,請參閱 路由簡介。
錯誤處理
在由依賴網路通訊的分散式服務所組成的系統中,請務必確保系統中的通訊對暫時性網路失敗具有抵抗力。 路由服務會實作錯誤處理,讓您處理許多可能導致服務中斷的通訊失敗案例。
如果路由服務嘗試傳送訊息時遇到 CommunicationException ,則會進行錯誤處理。 這些例外狀況通常表示嘗試與定義的用戶端端點通訊時發生問題,例如 EndpointNotFoundException、 ServerTooBusyException或 CommunicationObjectFaultedException。 錯誤處理程式碼也會攔截並嘗試在 TimeoutException 發生時重試傳送,這是另一個不是衍生自 CommunicationException 的常見例外狀況。
如需錯誤處理的詳細資訊,請參閱 路由簡介。
備份端點
除了與篩選數據表中每個篩選定義相關聯的目的地用戶端端點之外,您也可以建立備份端點清單,當傳輸失敗時,訊息將會路由傳送至該端點。 如果發生錯誤,且已針對篩選專案定義備份清單,路由服務會嘗試將訊息傳送至清單中定義的第一個端點。 如果此傳輸嘗試失敗,服務會嘗試下一個端點,並繼續進行此程式,直到傳輸嘗試成功、傳回非傳輸相關錯誤,或備份清單中的所有端點都傳回傳輸錯誤為止。
串流
如果您將系結設定為支援串流,路由服務就可以成功串流訊息。 不過,在某些情況下,訊息可能需要緩衝處理:
- 多點傳送(通過緩衝區來產生額外的訊息副本)。
- 容錯移轉(緩衝區,用於必要時將訊息傳送至備份)。
- System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly 設為 false(將資訊緩衝,以便使用 MessageBuffer 呈現 MessageFilterTable,讓過濾器能夠檢查消息正文)。
- 動態配置。