WCF 分析追蹤
WCFAnalyticTracingExtensibility 範例會示範如何將您自己的追蹤事件加入至 Windows Communication Foundation (WCF) 寫入到 .NET Framework 中 ETW 的分析追蹤資料流。 分析追蹤的用意在於輕鬆取得服務的可視性,而不必付出高效能的代價。 此範例示範如何使用 System.Diagnostics.Eventing API 撰寫與 WCF 服務整合的事件。
如需有關 System.Diagnostics.Eventing API 的詳細資訊,請參閱 System.Diagnostics.Eventing。
若要進一步了解 Windows 中的事件追蹤,請參閱使用 ETW 改善偵錯和效能調整。
處置 EventProvider
此範例使用實作 System.Diagnostics.Eventing.EventProvider 的 System.IDisposable 類別。 實作 WCF 服務的追蹤時,您可能會在服務的存留時間中使用 EventProvider 的資源。 因此,為了便於讀取,此範例絕不會處置已包裝的 EventProvider。 如果您的服務因為任何原因而有不同的追蹤需求,而且您必須處置這個資源,則應根據處置 Unmanaged 資源的最佳作法修改此範例。 如需處置受控資源的詳細資訊,請參閱實作 Dispose 方法。
自我裝載與 Web 裝載的比較
對於 Web 裝載的服務,WCF 的分析追蹤會提供一個稱為 "HostReference" 的欄位,這個欄位會用來識別發出追蹤的服務。 可延伸的使用者追蹤可以參與這個模型,而且此範例會示範其最佳作法。 當管道 '|' 字元實際出現在產生的字串中時,Web 主機參考的格式可以是下列其中一項:
如果應用程式不在根目錄:
<SiteName><ApplicationVirtualPath>|<ServiceVirtualPath>|<ServiceName>
如果應用程式在根目錄:
<SiteName>|<ServiceVirtualPath>|<ServiceName>
對於自我裝載的服務,WCF 的分析追蹤不會填入 "HostReference" 欄位。 此範例中的 WCFUserEventProvider
類別與自我裝載之服務所使用的類別行為一致。
自訂事件詳細資料
WCF 的 ETW 事件提供者資訊清單會定義設計為 WCF 服務作者從服務程式碼中所發出的三個事件。 下表為顯示這三個事件的分解。
事件 | 描述 | 事件識別碼 |
---|---|---|
UserDefinedInformationEventOccurred | 在服務中發生需要注意但不是問題的事件,發出此事件。 例如,您可能會在成功呼叫資料庫之後發出事件。 | 301 |
UserDefinedWarningOccurred | 發生未來可能導致失敗的問題時,發出此事件。 例如,當資料庫的呼叫失敗,但您能夠透過恢復成多餘的資料存放區來復原時,您可能會發出警告事件。 | 302 |
UserDefinedErrorOccurred | 當您的服務無法如預期運作時,發出此事件。 例如,如果資料庫的呼叫失敗,而且您無法從其他地方擷取資料,您可能會發出事件。 | 303 |
若要使用這個範例
使用 Visual Studio 開啟 WCFAnalyticTracingExtensibility.sln 方案檔案。
若要建置解決方案,請按 Ctrl+Shift+B。
若要執行此方案,請按下 Ctrl+F5。
在 Web 瀏覽器中按一下 [Calculator.svc]。 服務的 WSDL 文件 URI 應該會出現在瀏覽器中。 請複製該 URI。
執行 WCF 測試用戶端 (WcfTestClient.exe)。
WCF 測試用戶端 (WcfTestClient.exe) 位於
\<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe
。在 WCF 測試用戶端內依序選取 [檔案] 和 [新增服務],藉此加入服務。
在輸入方塊中加入端點位址。
按一下 [確定] 關閉對話方塊。
ICalculator 服務會在左窗格的 [我的服務專案] 底下加入。
開啟 [事件檢視器] 應用程式。
叫用服務之前,啟動 [事件檢視器] 並確認事件記錄正在接聽從 WCF 服務發出的追蹤事件。
從 [開始] 功能表中,依序選取 [系統管理工具] 和 [事件檢視器]。 啟用 [分析] 和 [偵錯] 記錄檔。
在事件檢視器的樹狀檢視中,依序巡覽至 [事件檢視器]、[應用程式及服務記錄檔]、[Microsoft]、[Windows] 和 [Application Server-Applications]。 以滑鼠右鍵按一下 [Application Server-Applications],然後依序選取 [檢視]、[顯示分析與偵錯記錄檔]。
請確認已選取 [顯示分析與偵錯記錄] 選項。 啟用 [分析] 記錄檔。
在事件檢閱器的樹狀檢閱中,依序巡覽至 [事件檢視器]、[應用程式與服務記錄檔]、[Microsoft]、[Windows]、[應用程式伺服器-應用程式] 和 [分析]。 以滑鼠右鍵按一下 [分析],然後選取 [啟用記錄]。
使用 WCF 測試用戶端測試此服務。
在 WCF 測試用戶端中,按兩下 ICalculator 服務節點底下的 [Add()]。
右窗格中隨即出現 Add() 方法,其中有兩個參數。
輸入 2 供第一個參數使用,並輸入 3 供第二個參數使用。
按一下 [叫用] 來叫用方法。
移至您已經開啟的 [事件檢視器] 視窗。 巡覽至 [事件檢視器]、[應用程式及服務記錄]、[Microsoft]、[Windows] 和 [應用程式伺服器-應用程式]。
以滑鼠右鍵按一下 [分析] 節點,並選取 [重新整理]。
這些事件會出現在右窗格中。
找出識別碼為 303 的事件,然後按兩下它即可開啟並檢查其內容。
這個事件是由 ICalculator 服務的
Add()
方法發出,且其承載等於 "2+3=5"。
若要清除 (選擇性)
開啟 [事件檢視器]。
依序巡覽至 [事件檢視器]、[應用程式與服務記錄檔]、[Microsoft]、[Windows] 和 [應用程式伺服器-應用程式]。 以滑鼠右鍵按一下 [分析],並選取 [停用記錄]。
依序巡覽至 [事件檢視器]、[應用程式與服務記錄檔]、[Microsoft]、[Windows]、[應用程式伺服器-應用程式] 和 [分析]。 以滑鼠右鍵按一下 [分析],並選取 [清除記錄]。
按一下 [清除] 可清除事件。
已知問題
在 [事件檢視器] 中有一個可能無法為 ETW 事件解碼的已知問題。 您可能會看到一個錯誤訊息:「找不到來源 Microsoft-Windows-應用程式伺服器-應用程式中事件 ID <id> 的描述。 本機電腦可能並未安裝引發此事件的元件,或安裝已損毀。 您可以在本機電腦上安裝或修復該元件。」如果您遇到這個錯誤,請在 [動作] 功能表選擇 [重新整理]。 接著,事件應該就會正確解碼。