規則驅動的 WCF 路由器
SOAP 路由器是一種根據一組規則,將 SOAP 訊息從用戶端轉送應用程式端點的媒介。這個範例會使用 Windows Communication Foundation (WCF) 建立 SOAP。
![]() |
---|
要建置和執行這個範例,必須安裝 .NET Framework version 3.5。要開啟專案和方案檔,必須要有 Visual Studio 2008。 |
路由器會使用 Windows Workflow Foundation (WF) 規則引擎來實作核心路由器功能,以判斷指定的訊息要轉送到哪裡。這個範例有兩個主要概念:在應用程式中如何一起使用 Windows Workflow Foundation 和 WCF,以及如何在工作流程外部 (也稱為「獨立」) 使用 Windows Workflow Foundation 規則引擎。
![]() |
---|
您可以使用External RuleSet Toolkit Sample,檢視此範例中的規則。 |
![]() |
---|
若要深入了解路由器的 WCF 各方面,請參考適用於 WCF 中繼路由器範例的文件。此範例以規則為基礎,取代了中繼路由器範例中的路由器功能。 |
此範例由四個專案組成:計算機服務、回應服務、路由器和用戶端。在這個範例中,計算機和 Echo 服務是標準的 WCF 服務,並分別定義於 Calculator.cs 和 EchoService.cs 檔案中。
路由器服務會使用 WCF 擴充性來處理訊息和其他行為,例如處理傳輸模式 (資料包/工作階段、要求-回覆/雙工)。
RouterTable.cs 原始程式檔會定義使用 WF 規則引擎的類別,以決定要將從用戶端接收的訊息轉送到哪裡。由於路由器會處理每則訊息,路由器便會根據訊息內容,呼叫 RouterTable.SelectDestination()
以取得訊息轉送目的的端點位址。
此時,RouterTable.cs 會執行 Selectdestination.Rules 中找到的 SelectDestination
RuleSet,以判斷訊息轉送目的的可能端點 (計算機服務或回應服務)。
若要了解或編輯 SelectDestination
RuleSet,您應該使用 .NET Framework version 3.5 SDK 中的 External RuleSet Toolkit Sample來開啟該 RuleSet。
若要開啟 SelectDestination RuleSet
在 [資料] 功能表上,按一下 [匯入]。
在 [開啟檔案] 對話方塊中,選取 router\SelectDestination.rules。
在 [RuleSet] 編輯器中,按一下 SelectDestination RuleSet。
在 [工作流程/類型選項] 對話方塊中,按一下 [瀏覽]。
在 [開啟檔案] 對話方塊中,前往 router/bins 資料夾並按一下 WCF_Router.Router.exe。
在 [工作流程/類型選項] 對話方塊的 [內含的類型] 區段中,按一下 [RoutingTable],然後按一下 [確定]。
在 External RuleSet Toolkit 應用程式中,展開 [SelectDestination],按一下 [1.0 版],然後按一下 [編輯規則]。
在 External RuleSet Toolkit 中開啟時,會如下圖一樣顯示 SelectDestination RuleSet。
來自 External RuleSet Toolkit 的 SelectDestination RuleSet
在 SelectDestination RuleSet 中有六個規則。下列是每個規則的描述,其順序為從最高優先順序到最低優先順序。
- Initialize variables:初始化
RouterTable
類別中的變數,讓其他規則都可以使用這些變數。 - CalculatorService:檢查訊息是否符合將訊息轉送至
CalculatorService
(訊息中必須包含標頭 "calculator") 的準則。如果符合,CalculatorService
端點就會新增至訊息轉送目的之可能端點的清單中。 - EchoService:檢查訊息是否符合將訊息轉送至
EchoService
(訊息中必須包含動作訊息標頭http://microsoft.servicemodel.samples/iechoservice/echo
) 的準則。如果符合,EchoService
端點就會新增至訊息轉送目的之可能端點的清單中。 - No matches:檢查是否沒有可將訊息轉送至的端點。如果為 true,則會登出主控台。
- One match:檢查是否有訊息的轉送目標單一端點。如果為 true,則會將訊息轉送至此端點。
- Multiple match:檢查是否有可將訊息轉送至的多個端點。如果為 true,則會將訊息轉送至從可能端點清單中隨機選取的端點。
請注意,這個 RuleSet 會對 Windows Workflow Foundation 規則使用 .NET Framework 3.5 功能:使用 new 關鍵字來叫用 (Invoke) 類別之建構函式的能力。例如在 CalculatorService
規則中,如果訊息符合準則,規則就會將新 EndpointAddress
新增至可能位址清單中。
當您執行範例時,作業要求和回應會顯示在用戶端主控台視窗中。在用戶端視窗中按下 ENTER 鍵,即可關閉用戶端。
Echo("Is anyone there?") returned: Is anyone there?
Add(5) returned: 5
Add(-3) returned: 2
若要建置和執行範例
若要在單一或多台電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示,不過會有下列例外:
- 在單一電腦和多部電腦的組態中,您會需要四個專案和四個可執行檔;分別用於用戶端、SOAP 路由器和每個應用程式服務。
- 在多部電腦組態中,您必須對這四個組態檔進行下列變更:
- 針對
CalculatorService
和EchoService
,變更 App.config 檔的第 21 行。媒介的實際主機名稱必須取代localhost
主機名稱。 - 變更路由器之 App.config 檔的第 16 行。將這兩個位址 (以 '|' 區隔) 分別變更為
EchoService
和CalculatorService
的主機名稱。 - 變更用戶端之 App.config 檔的第 5 行和第 7 行。媒介的實際主機名稱必須取代
localhost
主機名稱。 - 您也可以在這兩個應用程式服務上執行 ServiceModel Metadata Utility Tool (Svcutil.exe) (一旦這兩個應用程式服務更新為使用正確的位址),並重新產生 App.config 檔。
啟動用戶端之前,請確定路由器、
EchoService
和CalculatorService
都正在執行中。這三個服務都會列印出啟動時所接聽的端點位址。注意:
EchoService
和CalculatorService
應用程式端點會使用路由器的位址。執行該用戶端。用戶端會先聯絡
EchoService
,然後聯絡CalculatorService
。路由器則會顯示要來回轉寄訊息的 WS-Addressing 動作。注意:
如果 Client.exe 和 Router.exe 位於不同的電腦上,請取消註解 Client.exe.config 中的 <identity/>
區段,並將使用者主要名稱設定為其中一位執行 Router.exe 的使用者。
請參閱
工作
其他資源
External RuleSet Toolkit Sample
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.