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

工作流執行時可註冊多個追蹤服務。中央追蹤偵聽器接收所有事件,再依各服務提供的「追蹤設定檔」決定傳遞哪些資料。事件分三類:
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);
內建服務支援設定檔版本管理、更新通知(IProfileNotification)、資料分區(按天/週/月/年)。部署設定檔需呼叫預存程序 UpdateTrackingProfile。查詢資料可用 SqlTrackingQuery 以 SqlTrackingQueryOptions 篩選(狀態、日期、提取值)。報表建議使用資料庫視圖而非直接查表。
實作兩個類別:
TrackingService,負責提供設定檔(GetProfile/TryGetProfile/TryReloadProfile)與建立追蹤通道TrackingChannel,實作 Send(TrackingRecord) 處理三類記錄,及 InstanceCompletedOrTerminated 清理資源範例應用:
WF 追蹤架構極具彈性,內建 SQL 服務滿足大多數需求,自訂服務更能貼近業務場景。善用追蹤可大幅提升工作流可視性與管控能力。