WF 4.0 活動模型革新:簽名與本體分離
Windows Workflow Foundation 4.0 重新設計活動基礎架構:每個活動由 簽名 定義輸入/輸出參數(InArgument<T>/OutArgument<T>/InOutArgument<T>),由 本體 實作執行邏輯。本體可採用聲明式組合子活動(XAML),或繼承 CodeActivity/AsyncCodeActivity/NativeActivity 撰寫命令式程式碼。此設計使活動成為可組合、可序列化、可版本化的「工作流微服務」。
程序式活動分類完整對照表
Visual Studio 2010 工具箱「Programming」類別下包含四大族群,共 25 項活動:
集合管理活動
| 活動 | 功能 | 關鍵參數 |
AddToCollection<T> | 向集合新增項目 | Collection, Item |
RemoveFromCollection<T> | 從集合移除項目 | Collection, Item |
ClearCollection<T> | 清空集合 | Collection |
ExistsInCollection<T> | 檢查項目是否存在,結果輸出至 Result (bool) | Collection, Item |
流程控制活動
| 活動 | 功能 | 關鍵特性 |
If | 條件分支 | Condition (bool), Then/Else (Activity) |
DoWhile | 後測試迴圈 | Condition (bool), Body;Body 至少執行一次 |
While | 前測試迴圈 | Condition (bool), Body |
ForEach<T> | 循序遍歷集合 | Values (IEnumerable<T>), Body (ActivityAction<T>) |
ParallelForEach<T> | 並行遍歷集合 | 支援 CompletionCondition (bool) 提前終止 |
Sequence | 循序執行多活動 | Activities 集合 |
Switch<T> | 多路分支 | Expression (T), Cases (Dictionary<T, Activity>) |
Pick | 事件驅動非確定性選擇 | 包含多個 PickBranch (Trigger + Action),首個完成者獲勝,其餘取消 |
錯誤處理活動
| 活動 | 功能 | 關鍵行為 |
TryCatch | 結構化例外處理 | Try/Catches (Catch<T> 集合)/Finally;未捕獲例外導致工作流終止,Finally 不執行(符合 C# 語意) |
Catch<T> | 特定例外類型捕獲 | 僅能置於 TryCatch 內;Exception 輸出參數可取得例外物件 |
Throw | 拋出例外 | Exception (Exception 物件) |
實用工具活動
| 活動 | 功能 | 備註 |
Assign | 變數指派 | To (OutArgument), Value (InArgument);型別相容性於運行期驗證 |
Delay | 暫停工作流 | Duration (TimeSpan);非阻塞執行緒,由執行時排程恢復 |
InvokeMethod<T> | 呼叫 CLR 方法 | 支援靜態/實例、泛型、ref/out、params、異步模式 (Begin/End);TargetType/TargetObject, MethodName, Parameters |
WriteLine | 輸出文字 | Text (string), TextWriter 可導向 Console、檔案、ASP.NET Response 等 |
高級控制活動:取消、補償、事務、持久化
| 活動 | 核心用途 | 關鍵成員 |
CancellationScope | 定義取消處理邏輯 | Body (正常邏輯), CancelHandler (取消時執行) |
CompensableActivity | 長期執行可補償單元 | Body, Compensation (補償邏輯), Confirmation (確認邏輯) |
Compensate | 顯式觸發補償 | 目標 Target (CompensableActivity) |
Confirm | 顯式觸發確認 | 目標 Target (CompensableActivity) |
Persist | 主動持久化工作流實例 | 無參數;依執行時持久化設定運作 |
TransactionScope | 環境交易範圍 | 支援巢狀、要求現有交易 (Required 語意)、Body 完成自動 Complete |
設計模式啟示
- Pick 活動實現「基於事件的非確定性選擇」,是建構「等待外部信號」模式(如人工審核、超時升級)的核心構件。
- CompensableActivity + Compensate/Confirm 實現 Sagas 模式,適用於跨服務長期業務交易。
- TransactionScope 僅包裝資源管理器交易(SQL Server、MSDTC),不支援跨機器工作流實例的交易流動,跨機交易需配合
Receive/Send 訊息活動搭配 WS-AtomicTransaction。
下一篇預告
下一篇將涵蓋 Flowchart(流程圖活動)、Messaging(訊息活動:Receive/Send/ReceiveReply/SendReply)、PowerShell(PowerShell 活動)與 Migration(WF 3.x 遷移活動:Interop 等)四大類別。