首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF 核心教學第七章:基礎活動全解析——Sequence、Code、異常處理、暫停與終止

     編輯:關於.NET

第七章系統介紹 WF 基礎活動:Sequence(循序容器)、Code(執行自訂代碼)、Throw/FaultHandler(異常拋出與捕獲)、Suspend(暫停)、Terminate(終止)。並深入講解視圖設計器的錯誤/取消視圖與斷點除錯技巧。

Sequence 活動:循序執行的容器

Sequence 是複合活動,子活動依序執行。範例建立主控台應用,加入 Sequence 並放入三個 Code 活動(DoTaskOne/Two/Three),輸出順序驗證循序語意。

拖曳 Sequence 活動 加入第一個 Code 活動 設定 ExecuteCode 屬性 完成三個 Code 活動 執行輸出結果

Code 活動:執行自訂邏輯

Code 活動的 ExecuteCode 屬性指定事件處理器名稱。運行時觸發事件呼叫該方法,簽章為 void Method(object sender, EventArgs e)。本書大量使用此活動原型驗證邏輯。

Throw 活動:拋出工作流層級異常

直接在代碼中 throw 會被運行時「吞沒」。Throw 活動提供聲明式異常拋出:

  • FaultType:指定異常型別(如 System.Exception)。
  • Fault:綁定工作流屬性/欄位至具體異常實例(含訊息),透過「綁定到新成員」建立相依屬性。

範例:PreThrow 建立異常實例指派給 WorkflowException,Throw 拋出,PostThrow 不會執行。運行時觸發 WorkflowTerminated 事件。

Throw 活動設計器 選擇 FaultType 設定 Fault 屬性 綁定到新成員對話框 完整 Throw 流程 終止事件輸出

視圖設計器進階:錯誤/取消視圖與斷點除錯

右鍵設計器可切換三種視圖:

  • 檢視工作流:預設編輯視圖。
  • 檢視錯誤處理常式:放置 FaultHandler 活動,每個處理一種異常型別。藍色箭頭捲動區域,下方區域放置處理代碼(如 Code 活動)。
  • 檢視取消處理常式:工作流取消時執行清理/通知邏輯。

智慧標籤亦可快速切換。除錯支援:右鍵活動 →「中斷點」→「插入中斷點」,活動顯示紅點,支援逐活動單步執行。

右鍵選單切換視圖 取消處理視圖 錯誤處理視圖 智慧標籤切換 設定活動斷點 帶斷點的活動

FaultHandler 活動:捕獲並處理異常

  1. 切換至錯誤處理視圖,拖曳 FaultHandler 至藍色箭頭間。
  2. 設定 FaultType 為 System.Exception(需與 Throw 的 FaultType 一致)。
  3. 在 FaultHandler 內部區域拖曳 Code 活動(OnException),輸出異常訊息。

執行結果:異常在工作流內部被處理,不觸發 WorkflowTerminated,工作流正常結束(但實例仍停止)。若需異常後繼續執行,應在代碼中使用 try/catch 包裹活動邏輯。

切換至錯誤處理視圖 加入 FaultHandler 設定 FaultType FaultHandler 屬性 FaultHandler 內部 Code 活動 異常處理後輸出

Suspend 活動:暫停工作流實例

暫停不卸載實例,維持狀態等待人工介入。設定 Error 字串(可綁定屬性)。執行觸發 WorkflowSuspended 事件,參數攜帶錯誤訊息。宿主可選擇移除、恢復或重啟實例。範例在 FaultHandler 中加入 Suspend,主程式訂閱事件輸出日誌。

加入 Suspend 活動 設定 Error 字串 訂閱 WorkflowSuspended 事件 暫停事件輸出

Terminate 活動:強制終止工作流

用法同 Suspend,但執行後實例徹底銷毀,所有待執行工作遺失。觸發 WorkflowTerminated 事件,Exception 屬性為 WorkflowTerminatedException。適用於資源耗盡、外部資料錯誤、資料庫不可用等無法恢復情境。

加入 Terminate 活動 設定 Terminate Error 終止事件輸出

最佳實踐:Throw+FaultHandler 用於預期內的業務異常;Suspend 用於需人工介入的檢核點;Terminate 用於無法恢復的嚴重錯誤。代碼層級 try/catch 可讓工作流在異常後繼續執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved