EtwTracking 範例示範如何在工作流程服務上啟用 Windows Workflow Foundation (WF) 追蹤,並在 Windows 事件追蹤中發出追蹤事件(ETW)。 若要將工作流程追蹤記錄發出至 ETW,此範例會使用 ETW 追蹤參與者 (EtwTrackingParticipant)。
範例中的工作流程會接收要求、將輸入數據的倒數指派給輸入變數,並將對等傳回給用戶端。 當輸入數據為 0 時,會發生未處理的零除例外狀況,導致工作流程立即中止。 啟用追蹤之後,錯誤追蹤記錄會發出給 ETW,這有助於稍後針對錯誤進行疑難解答。 ETW 追蹤參與者會設定追蹤配置檔來訂閱追蹤記錄。 追蹤配置檔定義在 Web.config 檔案中,並以組態參數的形式提供給 ETW 追蹤參與者。 ETW 追蹤參與者是在工作流程服務的 Web.config 檔案中設定,並套用至服務即服務行為。 在此範例中,您會使用事件查看器檢視事件記錄檔中的追蹤事件。
工作流程追蹤詳細數據
Windows Workflow Foundation 提供追蹤基礎結構來追蹤工作流程實例的執行。 追蹤運行時間會建立工作流程實例,以發出與工作流程生命週期相關的事件、來自工作流程活動和自定義事件的事件。 下表詳細說明追蹤基礎結構的主要元件。
| 元件 | 說明 |
|---|---|
| 追蹤執行時間 | 提供基礎結構來發出追蹤記錄。 |
| 追蹤參與者 | 存取追蹤記錄。 .NET Framework 4.6.1 附帶一個追蹤參與者,該參與者將追蹤記錄以 Windows 事件追蹤 (ETW) 事件的形式寫入。 |
| 追蹤檔案 | 篩選機制,可讓追蹤參與者訂閱從工作流程實例發出的追蹤記錄子集。 |
下表詳細說明工作流程運行時間發出的追蹤記錄。
| 追蹤記錄 | 說明 |
|---|---|
| 工作流程實例追蹤記錄。 | 描述工作流程實例的生命週期。 例如,當工作流程啟動或完成時,就會發出實例記錄。 |
| 活動狀態追蹤記錄。 | 詳細活動執行。 這些記錄會指出工作流程活動的狀態,例如當活動被安排、完成或發生錯誤時。 |
| 書籤記錄恢復。 | 每當工作流程實例內的書籤被恢復時發出。 |
| 自訂追蹤記錄。 | 工作流程作者可以建立自定義追蹤記錄,並在自定義活動中發出記錄。 |
| ActivityScheduledRecord | 當活動排程另一個活動時,就會發出此記錄。 |
| FaultPropagationRecord | 當錯誤從活動中傳播時,此記錄便會被產生。 |
| CancelRequestedRecord | 當一個活動被另一個活動取消時,就會發出此記錄。 |
追蹤參與者會使用追蹤配置檔來訂閱所發出追蹤記錄的子集。 追蹤配置檔包含追蹤查詢,允許訂閱特定追蹤記錄類型。 追蹤配置可以在程式碼或配置中指定。
若要使用此範例
使用 Visual Studio 開啟EtwTrackingParticipantSample.sln方案檔。
若要建置此方案,請按 CTRL+SHIFT+B。
若要執行解決方案,請按 F5。
根據預設,服務會接聽埠 53797 (
http://localhost:53797/SampleWorkflowService.xamlx)。使用 [檔案總管] 開啟 WCF 測試用戶端。
WCF 測試用戶端 (WcfTestClient.exe) 位於 <Visual Studio 安裝資料夾>\Common7\IDE\ 資料夾中。
預設的 Visual Studio 安裝資料夾是 C:\Program Files\Microsoft Visual Studio 10.0。
在 WCF 測試用戶端中,從 [檔案] 功能選取 [新增服務]。
在輸入方塊中新增端點位址。 預設值為
http://localhost:53797/SampleWorkflowService.xamlx。開啟事件查看器應用程式。
叫用服務之前,請從 [ 開始 ] 選單啟動 [事件查看器],選取 [ 執行 ],然後輸入
eventvwr.exe。 請確保事件記錄檔正在監控工作流程服務發出的追蹤事件。在事件查看器的樹檢視中,流覽至 [ 事件查看器]、[ 應用程式和服務記錄檔],然後 Microsoft。 以滑鼠右鍵按下 Microsoft ,然後選取 [ 檢視 ] 和 [顯示分析和偵錯記錄 ] 以啟用分析和偵錯記錄
確定已核取 [顯示分析和偵錯記錄] 選項。
在 [事件查看器] 的樹視圖中,流覽至 [事件查看器]、[應用程式及服務記錄檔]、[Microsoft]、[Windows]、[應用程式伺服器應用程式]。 以滑鼠右鍵按兩下 [分析 ],然後選取 [ 啟用記錄 ] 以啟用 分析 記錄。
按兩下
GetData,使用 WCF 測試客戶端測試服務。這會開啟
GetData方法。 要求接受一個參數,並確保值為 0,這是預設值。按一下 啟動。
觀察從工作流程發出的事件。
切換回 [事件查看器],然後流覽至 [事件查看器]、[ 應用程式及服務記錄檔]、 [Microsoft]、 [Windows]、 [應用程式伺服器應用程式]。 以滑鼠右鍵按兩下 [分析 ],然後選取 [ 重新整理]。
工作流程事件會顯示在事件查看器中。 請注意,會顯示工作流程執行事件,其中一個事件是對應至工作流程中錯誤的未處理例外狀況。 此外,工作流程活動會觸發警告事件,表示活動發生錯誤。
使用除 0 以外的資料輸入重複步驟 9 和 10,以避免錯誤。
追蹤設定檔可讓您訂閱工作流程實例狀態變更時,執行時期發出的事件。 根據您的監控需求,您可以建立一個簡單的配置檔,以訂閱工作流程中的少量主要狀態變更。 另一方面,您可以建立非常精確的設定檔,其輸出足夠豐富,可以在稍後重新建構執行。 此範例示範使用 從工作流程運行時間發出至 ETW HealthMonitoring Tracking Profile的事件,這會發出一組小型事件。 在名稱為 Troubleshooting Tracking Profile 的 Web.config 中,還提供了一個不同的配置檔,以發出更多工作流程追蹤事件。 安裝 .NET Framework 4.6.1 時,會在 Machine.config 檔案中設定具有空白名稱的默認配置檔。 若未指定配置檔名稱或指定空白配置檔名稱,ETW 追蹤行為組態將使用此配置檔。
健康監控追蹤設定檔會發出工作流程實例記錄和活動故障傳播記錄。 此設定檔的建立方式是將下列追蹤配置檔新增至 Web.config 組態檔。
<tracking>
<profiles>
<trackingProfile name="HealthMonitoring Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
<state name="Aborted"/>
<state name="UnhandledException"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
<faultPropagationQueries>
<faultPropagationQuery faultSourceActivityName ="*" faultHandlerActivityName="*"/>
</faultPropagationQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
可透過變更EtwTrackingParticipant配置為下列項目來更改配置檔。
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="HealthMonitoring Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
清除 (選擇性)
開啟 [事件檢視器]。
流覽至 事件查看器、 應用程式和服務記錄檔、 Microsoft、 Windows、 Application Server-Applications。 以滑鼠右鍵按兩下 [分析 ],然後選取 [ 停用記錄]。
流覽至 事件查看器、 應用程式和服務記錄檔、 Microsoft、 Windows、 Application Server-Applications。 以滑鼠右鍵按兩下 [分析 ],然後選取 [清除記錄]。
選擇 [清除 ] 選項以清除事件。
已知問題
備註
事件查看器中有一個已知問題,其中可能無法譯碼 ETW 事件。 您可能會看到如下所示的錯誤訊息。
找不到Microsoft-Windows-Application Server-Applications提供的事件 ID 的描述。 引發此事件的元件未安裝在本機計算機上,或安裝已損毀。 您可以在本機電腦上安裝或修復元件。
如果您遇到此錯誤,請在動作窗格中點擊重新整理。 事件現在應正確解碼。