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

WF 追蹤服務深度解析:架構、設定檔、SQL 服務與自訂實作

     編輯:關於.NET

前言

Windows Workflow Foundation (WF) 的追蹤功能可監控工作流事件、活動屬性與自訂資料,協助合規、風險管理與流程可視化。本文完整剖析追蹤架構、設定檔、內建 SQL 服務與自訂服務開發。

追蹤架構

工作流執行時可註冊多個追蹤服務。中央追蹤偵聽器接收所有事件,再依各服務提供的「追蹤設定檔」決定傳遞哪些資料。事件分三類:

  • 工作流事件:狀態變更(如啟動、完成、終止、中止),含自訂事件參數
  • 活動事件:活動進入特定狀態(如 Closed)時的屬性值
  • 使用者事件:程式碼中手動呼叫 TrackData 記錄的自訂資料

追蹤設定檔

每個服務必須提供 TrackingProfile,可透過物件模型或 XML 序列化建立。設定檔由「追蹤點」組成:

  • WorkflowTrackPoint:指定要追蹤的工作流事件(透過 WorkflowTrackingLocation)
  • ActivityTrackPoint:包含 MatchingLocations 與 ExcludedLocations,可依活動型別、執行狀態、屬性條件(ActivityTrackingCondition)精準過濾,並可提取屬性值(ActivityDataTrackingExtract)
  • UserTrackPoint:匹配手動追蹤資料的名稱/鍵值

範例:追蹤失敗工作流與高優先級郵件活動的 To/Subject:

TrackingProfile profile = new TrackingProfile { Version = new Version(1,0,0) };

// 工作流失敗事件
WorkflowTrackPoint wfTrack = new WorkflowTrackPoint();
wfTrack.MatchingLocation = new WorkflowTrackingLocation(
    new List<TrackingWorkflowEvent> { TrackingWorkflowEvent.Aborted, TrackingWorkflowEvent.Terminated, TrackingWorkflowEvent.Exception });
profile.WorkflowTrackPoints.Add(wfTrack);

// 活動事件:SendEmail 進入 Closed 且 Priority=High
ActivityTrackPoint actTrack = new ActivityTrackPoint();
ActivityTrackingLocation actMatch = new ActivityTrackingLocation(typeof(SendEmail), false, new[] { ActivityExecutionStatus.Closed });
actMatch.Conditions.Add(new ActivityTrackingCondition("Priority", "High"));
actTrack.MatchingLocations.Add(actMatch);
actTrack.Extracts.Add(new ActivityDataTrackingExtract("To"));
actTrack.Extracts.Add(new ActivityDataTrackingExtract("Subject"));
profile.ActivityTrackPoints.Add(actTrack);

SQL 追蹤服務

內建服務支援設定檔版本管理、更新通知(IProfileNotification)、資料分區(按天/週/月/年)。部署設定檔需呼叫預存程序 UpdateTrackingProfile。查詢資料可用 SqlTrackingQuery 以 SqlTrackingQueryOptions 篩選(狀態、日期、提取值)。報表建議使用資料庫視圖而非直接查表。

自訂追蹤服務

實作兩個類別:

  1. 追蹤服務類別:繼承 TrackingService,負責提供設定檔(GetProfile/TryGetProfile/TryReloadProfile)與建立追蹤通道
  2. 追蹤通道類別:繼承 TrackingChannel,實作 Send(TrackingRecord) 處理三類記錄,及 InstanceCompletedOrTerminated 清理資源

範例應用:

  • 「目前狀態服務」:追蹤 StateMachine 活動狀態,供主程式即時查詢
  • 「工作流屬性追蹤服務」:反射提取所有屬性,在活動 Closed 時送回主程式,解決 ASP.NET 難以取得長時間工作流屬性值的問題

結語

WF 追蹤架構極具彈性,內建 SQL 服務滿足大多數需求,自訂服務更能貼近業務場景。善用追蹤可大幅提升工作流可視性與管控能力。

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