共用方式為


規則驅動的 WCF 路由器

SOAP 路由器是一種根據一組規則,將 SOAP 訊息從用戶端轉送應用程式端點的媒介。這個範例會使用 Windows Communication Foundation (WCF) 建立 SOAP。

Bb472517.note(zh-tw,VS.90).gif注意:
要建置和執行這個範例,必須安裝 .NET Framework version 3.5。要開啟專案和方案檔,必須要有 Visual Studio 2008。

路由器會使用 Windows Workflow Foundation (WF) 規則引擎來實作核心路由器功能,以判斷指定的訊息要轉送到哪裡。這個範例有兩個主要概念:在應用程式中如何一起使用 Windows Workflow Foundation 和 WCF,以及如何在工作流程外部 (也稱為「獨立」) 使用 Windows Workflow Foundation 規則引擎。

Bb472517.note(zh-tw,VS.90).gif注意:
您可以使用External RuleSet Toolkit Sample,檢視此範例中的規則。

Bb472517.note(zh-tw,VS.90).gif注意:
若要深入了解路由器的 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

  1. 啟動External RuleSet Toolkit Sample應用程式。

  2. 在 [資料] 功能表上,按一下 [匯入]。

  3. 在 [開啟檔案] 對話方塊中,選取 router\SelectDestination.rules。

  4. 在 [RuleSet] 編輯器中,按一下 SelectDestination RuleSet。

  5. 在 [工作流程/類型選項] 對話方塊中,按一下 [瀏覽]。

  6. 在 [開啟檔案] 對話方塊中,前往 router/bins 資料夾並按一下 WCF_Router.Router.exe。

  7. 在 [工作流程/類型選項] 對話方塊的 [內含的類型] 區段中,按一下 [RoutingTable],然後按一下 [確定]。

  8. 在 External RuleSet Toolkit 應用程式中,展開 [SelectDestination],按一下 [1.0 版],然後按一下 [編輯規則]。

  9. 在 External RuleSet Toolkit 中開啟時,會如下圖一樣顯示 SelectDestination RuleSet。

規則驅動的 WCF 路由器範例輸出

來自 External RuleSet Toolkit 的 SelectDestination RuleSet

SelectDestination RuleSet 中有六個規則。下列是每個規則的描述,其順序為從最高優先順序到最低優先順序。

  1. Initialize variables:初始化 RouterTable 類別中的變數,讓其他規則都可以使用這些變數。
  2. CalculatorService:檢查訊息是否符合將訊息轉送至 CalculatorService (訊息中必須包含標頭 "calculator") 的準則。如果符合,CalculatorService 端點就會新增至訊息轉送目的之可能端點的清單中。
  3. EchoService:檢查訊息是否符合將訊息轉送至 EchoService (訊息中必須包含動作訊息標頭 http://microsoft.servicemodel.samples/iechoservice/echo) 的準則。如果符合,EchoService 端點就會新增至訊息轉送目的之可能端點的清單中。
  4. No matches:檢查是否沒有可將訊息轉送至的端點。如果為 true,則會登出主控台。
  5. One match:檢查是否有訊息的轉送目標單一端點。如果為 true,則會將訊息轉送至此端點。
  6. 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

若要建置和執行範例

  1. 若要在單一或多台電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示,不過會有下列例外:

    • 在單一電腦和多部電腦的組態中,您會需要四個專案和四個可執行檔;分別用於用戶端、SOAP 路由器和每個應用程式服務。
    • 在多部電腦組態中,您必須對這四個組態檔進行下列變更:
    • 針對 CalculatorServiceEchoService,變更 App.config 檔的第 21 行。媒介的實際主機名稱必須取代 localhost 主機名稱。
    • 變更路由器之 App.config 檔的第 16 行。將這兩個位址 (以 '|' 區隔) 分別變更為 EchoServiceCalculatorService 的主機名稱。
    • 變更用戶端之 App.config 檔的第 5 行和第 7 行。媒介的實際主機名稱必須取代 localhost 主機名稱。
    • 您也可以在這兩個應用程式服務上執行 ServiceModel Metadata Utility Tool (Svcutil.exe) (一旦這兩個應用程式服務更新為使用正確的位址),並重新產生 App.config 檔。
  2. 啟動用戶端之前,請確定路由器、EchoServiceCalculatorService 都正在執行中。這三個服務都會列印出啟動時所接聽的端點位址。

    Bb472517.note(zh-tw,VS.90).gif注意:
    EchoServiceCalculatorService 應用程式端點會使用路由器的位址。

  3. 執行該用戶端。用戶端會先聯絡 EchoService,然後聯絡 CalculatorService。路由器則會顯示要來回轉寄訊息的 WS-Addressing 動作。

    Bb472517.note(zh-tw,VS.90).gif注意:
    如果 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.