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

Windows Workflow Foundation 實戰:技術支援工作流與持久化服務完整範例

     編輯:關於.NET

前言

WF 讓開發者以聲明式活動圖建模複雜業務流程,結合命令式程式碼與規則引擎,特別適合包含人工介入的長時間流程。本文以技術支援票務系統為例,示範完整實作。

業務場景

客戶來電 → 建立票證 → 客服人員離線 → 技術人員稍後認領處理 → 解決或升級 → 關閉票證。流程包含長時間等待與多角色互動,傳統順序程式碼難以管理狀態與持久化。

服務合約與實作

定義 IHelpDeskService 介面(標記 [DataExchangeService]),包含票證建立/關閉/升級方法與事件。HelpDeskService 實作介面,負責資料庫操作並向工作流引發外部事件。

[DataExchangeService]
public interface IHelpDeskService
{
    event EventHandler<HelpDeskTicketEventArgs> TicketClosed;
    event EventHandler<HelpDeskTicketEventArgs> TicketEscalated;
    void CreateTicket(string description, string userRef, string createdBy);
    void CloseTicket(string ticketID);
    void EscalateTicket(string ticketID);
}

工作流設計

循序工作流 HelpDeskWorkflow:

  1. InvokeMethod 呼叫服務建立票證
  2. Listen 活動等待外部事件,包含兩個 EventDriven 分支:
    - EventSink 綁定 TicketClosed 事件
    - EventSink 綁定 TicketEscalated 事件
  3. 事件觸發後呼叫服務更新票證狀態,流程結束

持久化與鈍化

工作流在 Listen 進入等待時自動持久化至 SQL Server(SqlWorkflowPersistenceService),從記憶體卸載(鈍化)。宿主程式啟動執行時引擎並註冊持久化服務:

WorkflowRuntime runtime = new WorkflowRuntime();
runtime.AddService(new HelpDeskService());
runtime.AddService(new SqlWorkflowPersistenceService(connString));
runtime.StartRuntime();

前端應用與實例恢復

Windows Forms 前端建立票證時啟動工作流實例,票證 ID 即工作流 InstanceId。技術人員前端列出待處理票證,選取後呼叫 GetLoadedWorkflow(id) 從資料庫載入實例並引發對應事件:

WorkflowInstance inst = runtime.GetLoadedWorkflow(id);
helpDeskService.RaiseCloseTicketEvent(inst.InstanceId);

關鍵技術細節

  • 事件引發需佇列至執行緒池(ThreadPool.QueueUserWorkItem)避免死結
  • WorkflowCompleted 事件在非 UI 執行緒,更新介面需 Control.Invoke 封送
  • 若需隱藏而非關閉視窗,取消 Close 事件並設 Visibility.Hidden,再次顯示需重新呼叫 ShowDialog

結語

WF 提供托管執行環境、持久化、追蹤、補償等企業級特性,讓複雜長時間流程的建模與維護變得簡單可靠。適用於文件審核、訂單處理、B2B/B2C 等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved