本章將帶您掌握以下核心概念:
活動是 WF 中工作流處理的最小單位。當我們將一個複雜的業務流程分解時,會發現它由許多更小、更專注的子任務組成。例如,一個需要將資料傳送至多個處理系統的大型任務,其子任務可能包括:從資料庫讀取資料、利用資料生成文件、透過 FTP 或 XML Web Service 將文件傳送至遠端伺服器、標記資訊已處理(如寫入資料庫並進入審計步驟)等。每個子任務都專注於特定功能——讀取資料庫、上傳文件、執行審計,這些就是活動。
創建工作流時,我們將這些獨立活動串聯起來,定義它們之間的轉換邏輯。部分活動可作為容器承載其他活動(如根活動),另一些則執行單一具體任務。根活動既可以是順序活動,也可以是狀態機活動,本章將詳細說明這些類型。
活動之間的流轉邏輯主要有兩種模式:一是按照創建根活動時指定的順序執行;二是僅在特定事件發生後觸發指定活動。為了深入理解,我們首先需要認識 WF Activity 物件,再探討活動如何鏈接。
WF 提供了 Activity 基類,雖然它看似簡單,但實現了工作流間複雜的互動機制。所有自訂活動均繼承自 Activity 類,賦予強大功能。自訂活動的創建將在第 13 章詳細介紹,而本書第二部分(第 7-13 章)均圍繞活動展開。
| 屬性 | 功能 |
|---|---|
| Description | 獲取或設定使用者定義的活動描述 |
| Enabled | 獲取或設定實例是否可執行和驗證 |
| ExecutionResult | 獲取最後執行結果(Canceled、Compensated、Faulted、None、Succeeded) |
| ExecutionStatus | 獲取工作流狀態(Canceling、Closed、Compensating、Executing、Faulting、Initialized) |
| Name | 獲取或設定活動實例名稱 |
| Parent | 獲取包含該活動的父活動 |
| WorkflowInstanceId | 獲取相關工作流實例的識別碼 |
| 方法 | 功能 |
|---|---|
| Cancel | 取消活動執行 |
| Clone | 返回活動的深層複製 |
| Execute | 同步執行活動 |
| GetActivityByName | 在組合活動中按名稱查找子活動 |
| Load | 從流載入活動實例 |
| RaiseEvent | 觸發與指定相依屬性關聯的事件 |
| RaiseGenericEvent<T> | 泛型版本的事件觸發 |
| Save | 將活動儲存至流 |
這些方法多為虛擬且受保護,旨在讓開發者覆寫以滿足自訂需求。其中 Execute 方法最為關鍵,工作流運行時調用它即啟動活動執行。
許多 Activity 方法需要 ActivityExecutionContext 物件作為參數。它由工作流運行時在工作流實例入隊時創建,開發者無需直接實例化。它提供活動與工作流實例互動所需的方法與服務(初始化、計時器、執行流產生),本質上是輔助物件,類似 ASP.NET 中的 HttpContext。
WF 大量使用相依屬性以便於活動綁定。傳統屬性由類別內部欄位支撐,但 WF 和 WPF 需頻繁訪問屬性進行資料綁定、佈局渲染等。ActivityBind 類簡化了活動間的屬性綁定。
活動具備驗證能力。例如 IfElse 活動未指定分支條件時,VS 會報錯。編譯帶驗證錯誤的程式碼會失敗,必須修正後才能執行。
工作流應用程式類型很大程度上取決於根活動的選擇。雖然新專案對話框僅顯示兩種模板,但實際存在三種主要類型:
活動按指定順序依次執行。根活動為 SequentialWorkflowActivity。適合自主執行、極少外部控制、用戶交互較少的業務處理(如資料讀取、處理、通知、寫入結果)。雖可處理審批等交互,但非核心關注點。
嚴重依賴外部事件驅動狀態轉換。根活動為 StateMachineWorkflowActivity。適合大量用戶交互場景:工作流發送通知等待響應(批准、選擇選項等),事件觸發狀態轉換。詳細內容見第 14 章。
基於 Policy 活動與規則條件,依業務規則判斷轉換邏輯。根活動為順序活動,無獨立專案模板,需從順序工作流起步再加入規則活動。第 12 章詳細介紹。
| 工作流類型 | 適用條件 |
|---|---|
| 順序工作流 | 任務自主執行,少量或無用戶交互,工作流自身控制執行 |
| 狀態機工作流 | 嚴重依賴外部控制,大量用戶/外部系統交互,事件驅動狀態轉換 |
| 基於規則的工作流 | 包含複雜判斷條件,非順序或狀態機模式可描述,根可為順序或狀態機 |
實際專案中常組合使用三種類型。選擇最適合的類型構建系統。
順序活動按指定順序執行,如同依清單辦事。VS 設計器中從上到下的佈局即代表執行順序。順序活動本身也是組合活動。雖本書不演示動態添加活動,但技術上可行。
之後可從工具箱拖放活動、調整屬性。需增加工作流程式庫項目時,參考前章說明或直接新增工作流類別。
第 14 章專門講解狀態機工作流,本節介紹核心概念並快速創建範例。
「有限狀態機」包含三要素:有限(狀態數量有限)、狀態(事件觸發時的邏輯條件)、機器(自動化)。以自動販賣機為例:



WF 中由 State 活動創建離散狀態,State 為組合活動但對子活動有限制。根活動為特殊的 StateMachineWorkflowActivity(特殊的 State 活動),初始化時接收參數。


理解工作流實例與宿主應用程式的通訊機制至關重要,第 8 章將介紹「調用外部方法」,第 10 章講解「事件活動」與狀態機的事件驅動模型。