共用方式為


自訂追蹤

本主題僅適用於 Windows Workflow Foundation 4。

這個範例示範如何建立自訂追蹤參與者,以及將追蹤資料的內容寫入主控台中。此外,範例還會示範如何發出其中填入使用者定義資料的 CustomTrackingRecord 物件。主控台式追蹤參與者會使用程式碼中建立的追蹤設定檔物件,篩選工作流程所發出的 TrackingRecord 物件。

範例詳細資料

Windows Workflow Foundation (WF) 提供追蹤基礎結構,可追蹤工作流程執行個體的執行。追蹤執行階段會實作工作流程執行個體,以發出與工作流程生命週期相關的事件、工作流程活動的事件,以及自訂追蹤事件。下表詳細說明追蹤基礎結構的主要元件。

元件 描述

追蹤執行階段

提供基礎結構以發出追蹤記錄。

追蹤參與者

使用追蹤記錄。.NET Framework 4 隨附追蹤參與者,會將追蹤記錄當做 Windows 事件追蹤 (ETW) 事件撰寫。

追蹤設定檔

篩選機制,可讓追蹤參與者訂閱從工作流程執行個體發出之追蹤記錄的子集。

下表詳細說明工作流程執行階段發出的追蹤記錄。

追蹤記錄 描述

工作流程執行個體追蹤記錄。

描述在工作流程執行個體的生命週期。例如,當工作流程啟動或完成時,就會發出執行個體記錄。

活動狀態追蹤記錄。

活動執行詳細資訊。這些記錄會指出工作流程活動的狀態,例如活動排程時間、活動完成時間,或是擲回錯誤的時間。

書籤繼續記錄。

只要工作流程執行個體中的書籤繼續,就會發出。

自訂追蹤記錄。

工作流程作者可建立自訂追蹤記錄,並在自訂活動中發出這些記錄。

追蹤參與者可使用追蹤設定檔訂閱所發出 TrackingRecord 物件的子集。追蹤設定檔包含追蹤查詢,這些查詢允許訂閱特殊追蹤記錄類型。追蹤設定檔可在程式碼或組態中指定。

自訂追蹤參與者

追蹤參與者 API 允許以使用者提供的追蹤者來擴充追蹤執行階段,可包含自訂邏輯以處理工作流程執行階段發出的 TrackingRecord 物件。

為了撰寫追蹤參與者,使用者必須實作 TrackingParticipant。具體而言,Track 方法必須由自訂參與者實作。這個方法會在工作流程執行階段發出 TrackingRecord 時呼叫。

public abstract class TrackingParticipant
    {
        protected TrackingParticipant();

        public virtual TrackingProfile TrackingProfile { get; set; }
        public abstract void Track(TrackingRecord record, TimeSpan timeout);
    }
}

完整的追蹤參與者是在 ConsoleTrackingParticipant.cs 檔案中實作。下列程式碼範例為自訂追蹤參與者的 Track 方法。

public override void Track(TrackingRecord record, TimeSpan timeout)
        {
            ...

            WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
            if (workflowInstanceRecord != null)
            {
                Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                    " Workflow InstanceID: {0} Workflow instance state: {1}",
                    record.InstanceId, workflowInstanceRecord.State));
            }

            ActivityStateTrackingRecord activityStateTrackingRecord = record as ActivityTrackingRecord;
            if (activityStateTrackingRecord != null)
            {
                ...
                 Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                    " :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
                       activityStateTrackingRecord.Name, activityStateTrackingRecord.State,
                    ((variables.Count > 0) ? vars.ToString() : String.Empty)));
            }

            CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

            if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
            {
                ...
            }
            
        }

下列程式碼範例會將主控台參與者加入至工作流程執行個體。

ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
            {
              ...
             // The tracking profile is set here, refer to Program.CS
            ...
            }
WorkflowInstance wfInstance = new WorkflowInstance(BuildSampleWorkflow());
wfInstance.Extensions.Add(customTrackingParticipant);

發出自訂追蹤記錄

這個範例還會示範從自訂工作流程活動發出 CustomTrackingRecord 物件的能力。

  • 除了會建立 CustomTrackingRecord 物件之外,還會在其中填入希望隨記錄發出的使用者定義資料。

  • 藉由呼叫 ActivityContext 的追蹤方法,即可發出 CustomTrackingRecord

下列範例示範如何在自訂活動內發出 CustomTrackingRecord 物件。

// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
                {
                    Data = 
                            {
                                {"OrderId", 200},
                                {"OrderDate", "20 Aug 2001"}
                            }
                };

// Emit custom tracking record
context.Track(customRecord);

若要使用這個範例

  1. 使用 Visual Studio 2010 開啟 [CustomTrackingSample.sln] 方案檔案。

  2. 若要建立方案,請按 F6。

  3. 若要執行方案,請按 CTRL+F5。

Dd807381.Important(zh-tw,VS.100).gif 注意:
這些範例可能已安裝在您的電腦上。請先檢查下列 (預設) 目錄,然後再繼續。

<InstallDrive>:\WF_WCF_Samples

如果此目錄不存在,請移至用於 .NET Framework 4 的 Windows Communication Foundation (WCF) 與 Windows Workflow Foundation (WF) 範例 (英文),以下載所有 Windows Communication Foundation (WCF) 和 WF 範例。此範例位於下列目錄。

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Tracking\CustomTracking