共用方式為


本文章是由機器翻譯。

工作流程服務

使用 WCF 和 WF 4 以視覺化方式設計工作流程

Leon Welicki

下載程式碼範例

開發人員逐漸採用服務導向架構 (SOA) 作為建立分散式應用程式的方式。對於 uninitiated 設計和實作服務導向的分散式應用程式可以嚇人。不過,Microsoft.NET Framework 4 可比以往要實作 Windows 通訊基礎 (WCF) 服務使用 Windows 工作流程基礎 (WF) 更容易。

WCF 工作流程服務提供高產能的環境,以製作較長時間執行、 長期的作業或其中強制應用程式通訊協定透過作業的順序是重要的服務。工作流程服務使用 WF 活動,可讓您傳送和接收資料使用 WCF 的實作。

本文章中我將說明如何將 WCF 和 WF 的.NET Framework 4,以建立較長時間執行、 長期以及已檢測的抵押貸款核准程序的不動產公司模型而不必撰寫程式碼所引入的幾個功能結合。本文並不適合是一般的簡介 WCF 或 WF,也不會執行它引導您完成建立工作方案的整個程序。我反而,將焦點上透過實際的商業案例的重要新.NET Framework 4 功能使用。完整的工作方案會包含在本文的可下載程式碼。

分析藍本

let’s 開始大綱周圍的工作流程應用程式所用以建置的案例。Contoso 住宅是銷售房屋和 condos 的不動產公司。提供更好的客戶服務及的端對端購買經驗與協助他們抵押貸款的需求與潛在客戶的三個抵押貸款公司 Contoso 協力電腦。每個抵押貸款公司提供不同利率。Contoso 優先順序抵押貸款廠商由他們以確保客戶取得最佳的協定 (使用較佳的速率會比較可能銷售房屋的假設) 的利率。

客戶提供 Web 應用程式透過其抵押貸款的要求資料。每位客戶會在年數、 薪資資訊和一些背景驗證資訊中,輸入客戶識別碼、 房屋的價格、 數量出頭期款、 貸款期間。

在 [工作流程應用程式中的第一個步驟 (請參閱 圖 1) 使用客戶輸入資料螢幕客戶,並判斷之前要傳送給抵押貸款廠商上要求的資格。


圖 1抵押貸款核准程序

應用程式將遵守下列規則:

  • 如果應徵者有一個的 foreclosure 一個 bankruptcy,或是在一個 lawsuit,petition 都會被拒絕。
  • 如果應徵者並沒有信用歷程記錄,並提供一個出頭期款小於百分之 20,應用程式傳回的修訂 (不正確 petition),但就不會遭到拒絕。客戶必須提供付款繼續下至少要有 20%。
  • 如果沒有任何上述套用 petition 已核准。

抵押貸款廠商會連絡根據來 Contoso ’s 慣用順序來 petition 抵押貸款要求。如果按揭廠商拒絕應徵者,會詢問下一個。有 ’s 標準抵押貸款核准的服務合約要求所有的廠商實作。在處理程序中的這個階段,期間客戶應該要能夠查詢其要求的狀態。

一旦抵押貸款 petition 解析 (一個廠商接受或拒絕所有),客戶互動會記錄在 Contoso ’s 客戶關係管理 (CRM) 系統透過服務公開的 CRM 系統中。結果被傳回給客戶。

請注意, 所示的抵押貸款核准程序圖 1 提供商務處理程序的一般描述,但是並沒有任何指示有關如何實作它。工作流程服務將會是此程序的實作。

建立宣告式的服務

工作流程服務將會從客戶接收資料、 執行初始審查、 協調與抵押貸款廠商對話、 CRM 服務中登錄互動和公開 (Expose) 給客戶結果。

服務將會較長時間執行 (可能需要天或月才能完成)、 durable] (可以將狀態儲存並稍後再繼續) 和檢測 (開發人員和使用者將能夠知道什麼而不必在服務進行偵錯會)。藉由使用 WCF 和 WF,您可以得到所有這以宣告方式而不需撰寫任何程式碼 — 您只需要花紋組合,並設定.NET Framework 所提供的元件。圖 2 顯示方案的架構圖。


圖 2方案的架構

定義工作流程的.xamlx 檔案中包含 WCF 工作流程服務。您可以定義商務程序以視覺化方式使用 WF] 設計工具和服務合約推斷根據工作流程的結構。

若要在 Visual Studio 2010 中建立工作流程服務,建立新的專案,然後選取 WCF 工作流程服務應用程式樣板。此專案範本會以接收和 SendReply 活動建立非常簡單 (但執行) 的工作流程。這就像了具有方法接收一個整數,並傳回字串的類別。您可以新增更多的活動來擴充工作流程。這些活動可能會新增執行邏輯或服務作業。

若要定義服務合約,您可以使用 WF 所提供的訊息活動。服務的組態儲存在 web.config] 檔案就像在一般的 WCF 服務。如果開啟 [web.config 看到很乾淨的組態檔,因為 WCF 工作流程服務要充份利用 WCF 4 所引進的服務組態增強。

訊息活動會以無接縫方式合併 WF 及 WCF。它們設計來支援訊息導向的工作流程,並提供更好的訊息傳遞至工作流程整合。傳訊活動啟用工作流程將資料傳送出去 (傳送,SendReply 和 SendAndReceiveReply) 的其他系統,並從其他系統 (接收、 ReceiveReply 和 ReceiveAndSendReply) 接收資料。它們也包含用於處理相互關聯 (InitializeCorrelation、 CorrelationScope) 和交易 (TransactedReceiveScope) 的活動。

接收及傳送活動允許模型內工作流程傳訊互動。在一個服務合約可以藉由在其中設定接收及傳送活動定義。每個接收公開為一項作業。每一個傳送活動會傳送訊息至服務。目標服務沒有利用 WCF 或甚至.NET Framework,因為您透過標準的通訊協定與它互動。

傳送和接收可以設定成可能是以訊息以或參數為主的 (RPC) 方法為接收及傳送實際的資料。  這會控制電線-格式資料會傳送或接收。

描述在流程圖中的處理序

您可以建立模型使用一個序列但 快速地觀看程序圖 1 節目,在某些並指向程序需要迴圈回到前一個步驟,並不直接支援循序工作流程中。(這需要模型以手動方式使用迴圈建構例如在 While 活動以仔細模型化的條件)一個流程圖是最適建立模型這種情況。

流程圖是新的控制流程活動引入 WF 4,可讓您在白板上就像您一樣描述您的程序中。流程圖將告訴您,處理程序是循序在具有循環回到前一個步驟在某些情況下可能需要執行的單一路徑的本質。若要描述處理程序,[流程圖],請使用箭頭及方塊、 以受歡迎的方法,在許多專業領域之間。

由 WCF 工作流程服務的專案範本所建立的預設工作流程是一個序列,但這並不表示它 ’s 只有您可以使用中工作流程服務的控制流程活動。要使用根活動在服務中一個流程圖 (或任何其他複合活動),只是刪除該順序,並新增一個流程圖。

圖 3 示範如何輕鬆地從商務使用者通常草稿來描述處理程序的圖表可以建立一個流程圖。


圖 3抵押貸款核准程序,為流程圖

流程圖是很棒的工具,描述商務程序最小化可執行的處理程序與它們指定方式之間不符。在這裡流程圖定義 程序的文件。

但 let’s 慢下一點。我們沒有及時完成一個仍然跳從空的流程圖。let’s 回前往空的流程圖,開始使用它。

潛在的主買方介紹他透過 Web 應用程式的資料。這項資料會傳遞至工作流程透過接收活動。包括 [流程圖] 中的接收活動的結果就是 [WorkflowServiceHost 公開可讓使用者藉由傳送訊息給它與工作流程通訊的端點。

如我先前所述,可設定傳送與接收活動使用上述任一個以訊息為基礎或 RPC 為基礎的方法。在這種情況下,我設定接收活動使用 RPC 為基礎的方法。這表示它會接收一組的輸入引數,類似方法呼叫。要讓它們使用工作流程,我需要建立變數,並將它們繫結至參數 (請參閱 圖 4).可能的另一種方法就有摺疊所有這些欄位的 DataContract。


圖 4設定輸入的參數

如果您想要建立及啟動新的執行個體的工作流程在收到一則訊息,您需要將 CanCreateInstance 屬性設定中接收活動為 true。這表示 [WorkflowServiceHost 會建立新的執行個體,當它從這個端點收到一則訊息。

模型化審查步驟與 WF 複合

一旦您在工作流程中有資料,就可以開始使用它。已篩選在這表示驗證一組條件來判斷應徵者是否可供一個抵押貸款之前連絡廠商, 第一個步驟。

其中一種方法是將數個決策圖形 (FlowDecision) 加入至主要的流程圖。這很,但使整體程序難以閱讀。此外,篩選規則的任何修改會需要更新主要的流程。流程圖似乎是不錯,以視覺化方式,適合 expressing 條件,但我們想要保留精實主要處理程序。

一個解決方案是加入新的流程圖中現有的流程圖。WF 4 的核心有撰寫的強式支援,所以活動可以自由組成。這表示您可以新增新的流程圖,您需要它包括內現有的流程圖的地方。此外,組合是任意,而且 doesn’t 強加任何限制。您可以在您的方便結合現有的活動。

子流程圖會顯示在父代 (流程圖設計工具不支援展開-就地) 中摺疊。您必須連按兩下以建立模型篩選邏輯。審查流程圖 (請參閱 圖 5) 是的主要的流程圖子系,且可以存取其變數和引數。


圖 5新增篩選流程圖

如果您想要撰寫一些程式碼?您當然可以撰寫程式碼來描述篩選程序。在這種情況下,例如您可以撰寫 CodeActivity,做為輸入客戶的接收資料、 執行驗證 (一組的鍊結 if 陳述式中您所使用的語言所選擇的),並傳回結果。這有它自己的專業和缺點。它提供潛在較佳的效能 (所有確認會執行的單一脈衝內都執行),更多壓縮表示比宣告式的方法。在另一方面,遺失 process (不透明) 視覺化表示,而且變更處理程序需要修改程式碼並重新編譯。

將結果傳送給該客戶

篩選驗證完成後我需要應徵者来傳回的結果。我收到申請人資料,透過工作流程的開頭為接收活動。若要傳送回覆回我使用一個 SendReply 活動 (針對現有接收 SendReply 可以建立 [接收上按一下滑鼠右鍵,並選取 [建立 SendReply 垃圾郵件)。接收和 SendReply 的組合可讓實作要求-回應訊息交換模式。SendReply 被設定為傳送給客戶回作業和描述訊息的結果。

為什麼 SendReply 並不傳送嗎?您可以使用一對接收及傳送活動以建立模型雙工訊息交換模式像 「 要求和等候回應 」 (類似於回呼),但是 SendReply 是更適合模型化 (類似於方法引動過程) 的要求-回應訊息交換模式。

決定要進入下一個位置

篩選完成時工作流程可以繼續抵押貸款 petition 程序。此時有兩個分支:拒絕和核准,但當應徵者需要提供更多資料,工作流程必須返回到先前的步驟。流程圖可讓模組化這個 一線條繪圖 動作就會在繼續進行工作流程步驟。

若要決定要採取基礎上的篩選結果路徑,我 (類似於 switch 陳述式) 的 FlowSwitch 活動中所示使用 圖 6.


圖 6FlowSwitch 中的每個輸出箭頭代表在參數中的案例

相互關聯

當抵押貸款要求會被視為不正確的時工作流程會要求提供額外的資料至現有的工作流程執行個體客戶。如何可以的接收活動知道它接收資料是稍早提供客戶資料的修正?亦即如何可以您傳送其他訊息給執行的工作流程執行個體?答案是相互關聯。

WF 4 介紹相互關聯的架構。一個相互關聯實際上是兩件事之一:

  • 群組郵件放在一起的一種方式。傳統的例如,這就是在 WCF 或甚至更直接要求訊息和其回覆之間關係的工作階段。
  • 一種將資料片段對應到工作流程服務執行個體方法。

.NET Framework 4 中有數種類型的相互關聯。我在此範例工作流程中使用以內容為基礎的相互關聯。以內容為基礎的相互關聯取得從內送訊息的資料,並將其對應至現有的執行個體。當工作流程服務具有由單一用戶端存取的多個方法,並交換訊息中的資料片段識別您想要的執行個體時,會使用以內容為基礎的相互關聯。

若要設定相互關聯,我宣告型別 CorrelationHandle 的變數。這是用來儲存相互關聯資訊 (在同一系列文件方案 customerCorrelationHandle) 控點。下一個步驟使用相互關聯控制代碼。接收活動 ’s 屬性方格對有相互關聯區段來設定相互關聯。指定透過相互關聯查詢 (CorrelatesOn) 建立相互關聯的資料,以及初始化相互關聯的處理常式 (CorrelationInitializers),它會有設定相互關聯控制代碼 (CorrelatesWith) 的屬性。我在接收活動,以建立與相關聯 customerCode 欄位中設定 [CorrelatesWith] 和 [CorrelatesOn 引數。

CorrelatesOn 和 CorrelatesWith 會令人困惑。這裡 ’s 可以幫助您的規則:接收 CorrelatesWith 現有的相互關聯控制代碼和相互關聯查詢所指定的 CorrelatesOn 資料中。

所有這可以被設定使用 WF 設計工具。

我想要讓我建立一個從郵件擷取 customerCode 的相互關聯查詢,在客戶識別相互關聯。請注意相互關聯的查詢製作使用 XPath,但 don’t 需要知道 XPath,因為 WF 設計工具會藉由檢查所收到的訊息合約,為您建立查詢。

第一個接收活動工作流程中的設定為 [建立新的工作流程執行個體,在收到一則訊息。不過,它 won’t 建立新的執行個體,因為它也設定為 customerCode 上相互關聯,我迴圈回到它時。在建立新的執行個體之前它會尋找現有的執行個體具有該相互關聯索引鍵。

詢問廠商比率

如果 petition 通過審查,它傳送到供應商 aluation。請記住 Contoso 搭配三個廠商,並已針對與他們的業務往來的喜好的順序。因此程序直到其中一個核准會詢問循序的廠商。

所有的廠商實作要求抵押貸款核准的標準服務的合約。利率要求給三個抵押貸款廠商之間唯一的差別是服務的 URI。複雜但是,廠商利率要求的原因是它涉及傳送郵件,並等待非同步回應時同時回應狀態的客戶要求的事實。

我可以一次建立此程序的模型,並複製它三次工作流程中但這會導致大量不必要的重複,並因此嚴重的可維護性問題。我想抽象這個步驟,因此我可以使用相同的程序很多次。在理想的情況下,我會提供某些輸入資料的工作流程,並取得結果,當它完成並,完全 ’s 自訂活動是針對。

WF 4 提供兩種方法來建立自訂的活動:

  • 宣告式 藉由撰寫其他現有的活動,建立新的活動。
  • 必要 來撰寫程式碼建立新的活動。有數個可衍生,包括 CodeActivity (簡單命令式行為),AsyncCodeActivity 的不同功能的基底類別 (執行非同步工作) 和 NativeActivity (與 WF 執行階段互動)。

活動有定義在何種資料方面它們可以接收 (InArgument),哪些資料它們就會傳回 (OutArgument),當他們完成其公用簽名碼的引數。我的活動將會收到客戶按揭資訊及服務做為輸入,URI,而且會傳回利率和結果字串訊息。

我使用 Visual Studio 中的活動項目範本來建立新活動以宣告方式使用 WF 設計工具。設計工具可讓您以視覺化方式撰寫自訂活動,透過拖、 卸除現有的活動,並設定其引數。撰寫自訂活動與設計工具的結果是定義 x: Class 的 XAML 檔案。

我呼叫活動 AskVendor。AskVendor 活動接收按揭資訊來自客戶] 和 [做為輸入,服務的 URI,並提供利率和做為輸出的結果字串訊息。如果率是 0,petition 已被拒絕。

AskVendor 傳送訊息至抵押貸款廠商,詢問利率,並等待來自供應商的回應。回應可能會需要分鐘小時或甚至幾天到到達。等待回應,應徵者可能會想要知道處理序的狀態。因此,活動也回應狀態要求訊息從應徵者。

若要同時處理兩個動作我可以使用 Parallel 活動為自訂活動的根目錄。一個分支中我有通訊抵押貸款廠商和在另來接聽的客戶時,在等待廠商 ’s 回應活動的所有活動。AskVendor 內使用的所有訊息活動設定相互關聯 customerCode 欄位上。圖 7 顯示 AskVendor 自訂活動。


圖 7AskVendor 自訂活動

如所述,自訂活動的根目錄會是一個平行。[左] 分支會傳送訊息至一個廠商,並等待回應。一旦收到回應它將產生的字串訊息格式化,並將已完成的旗標設為 True。[右] 分支接聽來自應徵者的狀態查詢要求。接收和 SendReply 是內部的某個 While 活動執行直到已完成的旗標是,則為 True。Parallel 活動 ’s 完成條件 (執行分支完成時) 設定已完成的旗標設為 true。因此,[左] 分支完成 (從廠商接收訊息),已完成的變數信號為 True,而且在右邊 While 也完成。

自訂活動是就像任何其他活動。當您建立自訂活動時它會顯示最多會自動在工具箱中的活動。並使用它是沒有什麼不同從使用任何現有的活動:從工具箱拖曳、 把它放在設計工具中,並設定它的引數。因為我 haven’t 建立此活動設計工具,預設設計工具會指派給它 (您可以在此設定 DisplayName 屬性矩形)。屬性方格會自動顯示活動的所有引數。

我在前文有提到 WF 4] 中的撰寫方式強式的支援。這也適用於自訂活動。如果您建立您自己的複合活動,能夠自由地撰寫與順序、 流程圖、 平行或甚至其他自訂活動等任何其他現有活動。

叫用 CRM 服務

Contoso ’s CRM 系統公開它的核心功能,為服務。其中一個這些服務可以讓註冊與客戶互動。我可以叫用它使用傳送活動,但這就意味著以手動方式設定活動和匯入其服務的資料合約。

如果我只是可以匯入 WF 的服務,並執行它,它會是很棒。這剛好是工作流程服務專案中加入服務參考的作用:給定的服務合約,它會自動建立 Proxy 活動 (一個用於服務中每個作業),可用來叫用該服務 (請參閱 圖 8).在這種情況下 CRM 服務合約有三種作業,所以 「 加入服務參考 」 具有建立會顯示在工具箱中的三個活動。


圖 8 加入服務參考到 CRM 服務

溝通結果

最後,我需要提供給客戶的結果。要保持應用程式簡單,我剛才使用公開給客戶結果為 ReceiveAndSendReply 活動。一旦客戶會讀取結果,工作流程完成。

若要執行此動作我需要在 [流程圖] 中卸除一個 ReceiveAndSendReply。附註在設計工具介面中放置活動時, 您會得到摺疊的順序。這是因為 ReceiveAndSendReply 是表示它 ’s 預先設定的一段 (在此情況是接收的順序和 SendReply) 活動的系統活動] 範本。這之前看到我的篩選加入子系流程圖時。

若要進行 ReceiveAndSendReply 我需要切入並在接收活動中設定端點資訊。我也需要設定這樣當客戶傳送訊息與他 customerCode,他會收到一個回應,客戶識別相互關聯的接收。

長時間執行工作

一旦工作流程將核准要求傳送至供應商,服務執行個體將會坐閒置等待回應。小時、 天或甚至數週,回應可能來自於以分鐘為單位。這會造成一些有趣的挑戰。您可能 don’t 想保留在記憶體中的所有執行個體,因為所會消耗不必要的系統資源,而且 wouldn’t 縮放]。而且如果主機處理序當機 (或較不 apocalyptic 案例中需要關閉進行維護),任何未完成的執行個體就會遺失。

如果當執行個體不會執行任何工作,則您可能只是將它儲存至持久儲存體並從記憶體中移除,wouldn’t 是很棒嗎?您可以 — 透過 WF 持續性架構可讓工作流程執行個體儲存媒體來儲存稍後擷取。

這表示執行個體不繫結至任何現有的處理序或電腦。到範例工作流程中篩選可以發生在一個處理序中,第一個廠商詢問比率可能發生在另一個,及接收回應可以發生在第三 — 而不會影響工作流程執行個體 ’s 執行或其資料。這已達到更好使用資源增進延展性和提供可靠度功能 — 在主應用程式中的當機不會產生作用中的執行個體的遺失,因為它們可以繼續從點處它們已上次保存。

工作流程執行個體儲存到執行個體存放區中。WF 4 包括一個 SQL Server 為基礎的執行個體存放區和保存性架構是可延伸的所以您也可以撰寫自己。(SDK 中的 [PurchaseProcess 範例會示範如何撰寫非常簡單的文字檔案執行個體存放區例如)。

我可以使用內建的 SQL Server 執行個體存放區來保存 Contoso 工作流程的執行個體。好消息是您 don’t 需要撰寫任何程式碼來使用它。在工作流程服務持續性是可以設定在 web.config 檔中的行為如下:

<!--Set up SQL Instance Store-->
<sqlWorkflowInstanceStore connectionString="Data Source=.\SQLExpress;Initial Catalog=InstanceStore;
Integrated Security=True;Asynchronous Processing=True"/>
          
<!--Set the TimeToUnload to 0 to force the WF to be unloaded. To have a durable delay, the workflow needs to be unloaded-->
<workflowIdle timeToUnload="0"/>

第一行設定持續性行為,以使用 SQL Server 執行個體存放區。 第二行指示持續性架構,來保存和卸載執行個體,只要它們變成閒置 (這表示當您執行一個接收,並變成閒置等待回應,工作流程執行個體將卸載並儲存到資料庫中)。

如果工作流程設定為是永續性,並且已將相互關聯設定,主機 (WorkflowServiceHost) 是負責載入正確的執行個體,在訊息到達時根據相互關聯資訊。

假設您有設定上 customerCode,相互關聯執行個體說 customerCode = 43。 抵押貸款廠商尋求一個速率和執行個體保存 (Persist) 等待回應時 (包括持續性儲存相互關聯資訊)。 當抵押貸款公司回傳送 customerCode 訊息 = 43,WorkflowServiceHost 自動從執行個體存放區載入該執行個體,並會在訊息分派。

請注意 SQL 執行個體存放區不依預設安裝。 您需要明確地藉由執行一組指令碼提供與.NET Framework 4 」 進行安裝。

追蹤服務

因此我有較長時間執行服務進行通訊與其他服務以訊息為基礎的方式。 服務已設定成持久、 確實的部份及其工作平行,並且可以執行非同步活動。 這看起來很複雜。 如果發生錯誤吗? 您要如何分辨哪些活動失敗? 如果您只是要知道什麼會與服務的執行個體?

Visual Studio 可讓偵錯工作流程 (而且您可以執行逐步偵錯 WF 設計工具中設定中斷點就像是在程式碼中時一樣的方式),但這不是實際執行環境中的選項。

而是,WF 包括豐富追蹤基礎結構,提供有關執行工作流程資料。 追蹤會告訴您有關工作流程 (追蹤事件) 中發生的事情来儲存這些事件的追蹤參與者中。 追蹤設定檔允許篩選追蹤參與者會接收,所以它可以取得只是所需的資訊的事件。

WF 4 提供將資料儲存在 Windows 事件記錄檔 (EtwTrackingParticipant) 的追蹤參與者。 您可以擴充 TrackingParticipant 來建立您自己的追蹤參與者。 此工作流程,我會使用預設 EtwTrackingParticipant。 您 don’t 需要撰寫任何程式碼來使用它 ; 只是提供在 web.config 檔中的適當設定。 我來設定服務使用 [EtwTrackingParticipant 開始:

<!--Set up ETW tracking -->
<etwTracking profileName="HealthMonitoring "/>

我也將它設使用提供的事件,有助於評估我們的服務健康狀況的 HealthMonitoring 設定檔 (請參閱 圖 9). 現在,服務可提供協助監視其健康狀態並修正問題,所顯示的樣子的事件上的資訊。 SDK 提供數個的範例顯示如何建立您自己的追蹤參與者以及如何撰寫疑難排解的設定檔。

圖 9指定追蹤參與者設定檔

<tracking>
  <profiles>
    <!--The health monitoring profile queries for workflow instance level records and for workflow activity fault propagation records-->
    <trackingProfile 
      name="HealthMonitoring">
      <workflow activityDefinitionId="*">
        <workflowInstanceQueries>
          <workflowInstanceQuery>
            <states>
              <state name="Started"/>
              <state name="Completed"/>
              <state name="Aborted"/>
              <state name="UnhandledException"/>
            </states>
          </workflowInstanceQuery>
        </workflowInstanceQueries>
        <faultPropagationQueries>
          <faultPropagationQuery 
            faultSourceActivityName ="*" 
            faultHandlerActivityName="*"/>
        </faultPropagationQueries>
      </workflow>
    </trackingProfile>
  </profiles>
</tracking>

部署及取用服務

因此我建立使用設計工具的工作流程,並設定它來使用持續性和追蹤。 唯一的剩餘工作是主控件,並執行它。

同時開發,您可以與內建的 Web 服務主機,在 Visual Studio 2010 主控服務。 如果要執行這項操作,您只需要與服務執行專案,而且您完成。

裝載服務在實際執行環境中的只會稍微更複雜的。 您可以裝載在 IIS 或 AppFabric 應用程式伺服器擴充程式的 WCF 工作流程服務。 與 Visual 的 Studio 2010 您可以建立可直接匯入到 IIS 的封裝。 如果決定使用 AppFabric 能夠利用像在儀表板,提供您服務的執行個體的摘要的資訊的功能,而且查詢已錄製的追蹤。

最終步驟是實際使用該服務。 在這種情況下 Contoso 公司會希望以 Web 為基礎的介面,讓使用者與服務互動。 這表示取用從 ASP.NET 應用程式服務。

您可以在一般的程式碼中撰寫看到在這裡,就如同其他 WCF 服務範例 WCF 工作流程服務。 若要使用它,您需要在用戶端專案中加入服務參考。 此服務參考會建立用戶端叫用該服務的 Proxy。

用手中參考中,您可以叫用該服務。 這個服務的用戶端服務中有每個接收活動的一項作業。 圖 10 顯示用來要求抵押貸款核准 (並因此啟動服務的新執行個體) 的程式碼。

圖 10 取用服務

protected void OnSubmit(object sender, EventArgs e) {
  using (ContosoRealEstate.ContosoRealEstateClient client = 
    new ContosoRealEstate.ContosoRealEstateClient()) {

    string message = "";        
    string result = client.EvaluateMortgage(
      out message,
      this.txtId.Text,
      Convert.ToInt32(this.txtHousePrice.Text),
      Convert.ToInt32(this.txtDownpayment.Text),
      Convert.ToInt32(this.txtYears.Text),
      Convert.ToInt32(this.txtSalary.Text),
      this.chkCreditHistory.Checked,
      this.chkBankrupcy.Checked,
      this.chkLawsuit.Checked,
      this.chkForeclosure.Checked);
    lblMessage.CssClass= result;
    lblMessage.Text = message + " (" + result + ")";

    this.btnSubmit.Visible = result.Equals("Incorrect");
    this.btnMonitor.Visible = result.Equals("Approved");
  } 
}

關閉備忘稿

如您看到.NET Framework 4] 提供豐富的功能集,可用來建置複雜的真實世界解決方案藉由組合現有的元件。 架構也提供擴充性點來量身訂做這些元件來容納各種不同的案例的特定需求。

WCF 工作流程服務可讓您藉由只需撰寫的現有的活動並設定服務以宣告方式描述較長時間執行、 持久、 已檢測的處理程序 — 雖然您也可以撰寫自己的程式碼,如有必要。

在這篇文章我結合 WF 4 和 WCF 4 建置服務進行一些工作在本身和協調與其他現有服務的交談中的幾項功能。 我建置整個服務而不需撰寫程式碼包括新的成品 (自訂活動)。

有 ’s 更多您可以利用這些.NET Framework 4 技術來達成目的。

Leon Welicki WF 小組在 Microsoft 中的程式管理員著重在活動和 WF 執行階段。之前要聯結 Microsoft,他曾如教育電腦科學教職人員,在 [Pontifical 大學的 Salamanca 馬德里在上為大型的西班牙文電信公司而外部從業教授導致架構設計人員和開發經理。

多虧來檢閱本文的下列的技術專家: Dave Cliffe、 Vikram Desai、 Kavita Kamani 及 Bob Schmidt