詳解WF 4.0 beta1中的跟蹤參與者
在之前的文章中,我們簡單的介紹了WF 4.0 beta1中的跟蹤機(jī)制,并且深入介紹了WF 4.0 beta1的跟蹤配置。
你還可以通過試驗(yàn)下面的示例來獲得更多WF 4.0 beta1跟蹤機(jī)制的動手經(jīng)驗(yàn)。本文所使用的示例包含在下面的資源中:
WCF and WF samples for .NET 4 Beta 1
ETW tracking participant sample
跟蹤參與者概覽
正如《WF 4.0 beta1中的跟蹤機(jī)制》所述,WF 4.0的跟蹤基礎(chǔ)結(jié)構(gòu)由3個(gè)主要的組件構(gòu)成:
跟蹤記錄:由工作流運(yùn)行時(shí)放出。
跟蹤賬戶:允許你以聲明性、靈活的方式來訂閱跟蹤記錄。
跟蹤參與者:直接監(jiān)聽運(yùn)行時(shí)放出的跟蹤記錄,并以根據(jù)選擇的方式來處理它們。這種處理包括寫入到特定的輸出(比如文件、控制臺、ETW)、處理/匯總這些記錄、或者其他方式的組合。
在WF 4.0 中,多個(gè)跟蹤參與者可以同時(shí)消費(fèi)跟蹤事件。每個(gè)跟蹤參與者都可以關(guān)聯(lián)到一個(gè)不同的跟蹤配置。
跟蹤參與者用于獲取工作流放出的跟蹤數(shù)據(jù),并將它們存儲到不同的媒介中。所以,跟蹤記錄的任何后期處理也可以通過跟蹤參與者來完成。在將來的文章中,我們會介紹WF 4.0跟蹤基礎(chǔ)結(jié)構(gòu)完整的可擴(kuò)展性,包括便攜自定義跟蹤參與者。
現(xiàn)成的ETW跟蹤參與者
在.NET 4中,我們內(nèi)置了一個(gè)現(xiàn)成的Event Tracing for Windows(ETW) 跟蹤參與者,它可以將跟蹤記錄輸出到ETW。ETW跟蹤參與者會將這些記錄寫入到一個(gè)ETW會話中,寫入的方式非常高效,對應(yīng)用性能的影響也非常小。
使用跟蹤參與者的優(yōu)勢之一便是可以在Windows事件查看器中查看跟蹤記錄,就在“應(yīng)用程序”分類和“系統(tǒng)”分類的旁邊。
下面是在Web.config文件中配置ETW跟蹤參與者的示例:
- <configuration>
- <system.web>
- <compilation targetFrameworkMoniker=".NETFramework,Version=v4.0"/>
- </system.web>
- <system.serviceModel>
- <diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />
- <tracking>
- <participants>
- <add name="EtwTrackingParticipant"
- type="System.Activities.Tracking.EtwTrackingParticipant, System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
- profileName="HealthMonitoring_Tracking_Profile"/>
- </participants>
- </tracking>
- <behaviors>
- <serviceBehaviors>
- <behavior name="SampleTrackingSample.SampleWFBehavior">
- <trackingComponents>
- <add name="EtwTrackingParticipant"/>
- </trackingComponents>
- </behavior>
- </serviceBehaviors>
- </behaviors>
- </system.serviceModel>
- </configuration>
在ETW中,事件是通過Provider Id來寫入到ETW會話中的。ETW跟蹤參與者所使用的Provider Id定義于Web.config的diagnostics節(jié)(在<system.serviceModel><diagnostics>中):
- <system.serviceModel>
- <diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />
- …
在沒有指定Provider Id時(shí),ETW跟蹤參與者會使用一個(gè)默認(rèn)的Provider Id。
跟蹤參與者定義于<system.serviceModel><tracking><participants>節(jié)。每個(gè)跟蹤參與者都有一個(gè)與之關(guān)聯(lián)的配置,藉此來制定它所訂閱的跟蹤記錄:
- <system.serviceModel>
- …
- <tracking>
- <participants>
- <add name="EtwTrackingParticipant"
- type="System.Activities.Tracking.EtwTrackingParticipant, System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
- profileName="HealthMonitoring_Tracking_Profile"/>
- </participants>
- </tracking>
- …
定義好它們之后,就可以把跟蹤參與者添加到服務(wù)行為中。這會把選中的跟蹤參與者添加到工作流實(shí)例的擴(kuò)展中,它們就這樣開始接收跟蹤記錄了。
為此,我們只需要像這樣來使用之前步驟中定義的跟蹤參與者名稱:
- <behaviors>
- <serviceBehaviors>
- <behavior name="SampleTrackingSample.SampleWFBehavior">
- <trackingComponents>
- <add name="EtwTrackingParticipant"/>
- </trackingComponents>
- </behavior>
- </serviceBehaviors>
- </behaviors>
下圖闡述了跟蹤數(shù)據(jù)經(jīng)過ETW跟蹤參與者的流轉(zhuǎn)過程:
一旦跟蹤數(shù)據(jù)到達(dá)了ETW會話中,就能夠以多種方式來消費(fèi)它。最常使用的方法之一是通過事件查看器來消費(fèi)這些事件,事件查看器是一個(gè)用來查看來自應(yīng)用程序和服務(wù)的日志與跟蹤記錄的Windows工具。
在事件查看器中消費(fèi)來自ETW跟蹤參與者的跟蹤數(shù)據(jù)
由ETW跟蹤參與者寫入到ETW會話中的事件可以被事件查看器消費(fèi)(當(dāng)使用默認(rèn)Provider Id時(shí))。這就允許快速地查看工作流放出的跟蹤記錄。
在事件查看器中啟用跟蹤記錄的方法如下:
打開事件查看器(eventvwr.exe)
定位到“應(yīng)用程序和服務(wù)日志”>“Microsoft”>“WCF”>“WF-Development”
右鍵單擊并選擇“Show Analytic and Debug logs”來啟用查看
啟用日志
在ETW Tracking Participant Sample中,工作流模擬了出錯的情況,ETW跟蹤參與者則用來跟蹤這個(gè)問題。下圖顯示了事件查看器中的跟蹤事件:
所有跟蹤記錄都擁有從100-112的ETW事件ID。其他事件ID(200-225)則用于其他類型的追蹤(Tracing)(比如WCF追蹤)。在將來的文章中,我們會全面地介紹與監(jiān)視數(shù)據(jù)視圖相關(guān)的追蹤和跟蹤事件。
通過EW跟蹤參與者放出的跟蹤記錄還會在事件查看器中顯示適當(dāng)?shù)陌踩墑e。這樣就能夠很輕松地識別工作流執(zhí)行過程中出現(xiàn)的任何警告或者錯誤。
.NET 4.0 beta1通過使用ETW跟蹤參與者以及它與事件查看器的集成,使得消費(fèi)跟蹤記錄變得又快捷又輕松。
預(yù)告
在將來的文章中,我們還會介紹自定義跟蹤參與者和如何放出自定義跟蹤記錄。與此同時(shí),我們也期待您對以下示例和動手實(shí)驗(yàn)的反饋:
WCF and WF samples for .NET 4 Beta 1
ETW tracking participant sample
【編輯推薦】