程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 利用Trace Log在WCF應用中排錯

利用Trace Log在WCF應用中排錯

編輯:關於.NET

前言

隨著WCF越來越多地被應用到實際系統中,其優勢也越來越多地被大家所接受。但是WCF作為一種典型的分布式應用,也具有分布式應用固有的弊病,那就是開發和維護相對比較復雜。特別是在錯誤排查方面,比非分布式程序要復雜很多。那麼怎麼樣才能更有效地排查WCF中發生的錯誤呢?這就不得不提到WCF的Trace Log功能。本文將在以IIS 6.0作為Host的WCF服務為實例談談Trace Log的應用。

在開始之前,先一起來認識兩個朋友:SvcConfigEditor 和 SvcTraceViewer。

【SvcConfigEditor】:微軟提供的用來輔助編輯WCF配置文件的工具。(當然也可以直接編輯Config文件,但是用工具方便一些。)

【SvcTraceViewer】:微軟提供的用來查看WCF的Trace Log的工具。

它們兩個的路徑都是 C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin。

配置Config文件以啟用Trace Log

啟動SvcConfigEditor.exe,能看到如下界面:

通過File —> Open —> Config File打開所要編輯的Config文件。(web.Config文件),選中Diagnostics節點,顯示如下:

上圖顯示的配置是.NET默認的配置,因為Trace Log功能默認是關閉的。

簡單介紹一下上面的選項:

Performance Counter:共有三種形式Off(Default)、ServiceOnly、All,這個是和系統的性能監視工具(perfmon.exe)結合使用的,在WCF性能調優的使用使用的到,本文將不討論。

WMI Provider:該選項允許WCF將Trace Log記入到Windows Management Instrumentation (WMI)中,查看需要裝WMI CIM Studio,不討論。

Log Auto Flush:可以讓應用程序關閉時Log自動輸出。

MessageLogging:這個選項可以記錄WCF的所有的消息,可以記錄Soap消息的主體,也可以將整個消息全部記錄下來。有三個級別:Malformed、Service和Transport。

Tracing:這個選項可以記錄WCF服務和客戶端的所有交互信息,共有六個記錄級別:Off、Critical、Error、Warning、Information和Verbose。

其中MessageLogging和Tracing是本文討論的重點。

點擊Enable MessageLogging和Enable Tracing。

對於MessageLogging,修改其Log Level為Transport,並點擊ServiceModelMessageLoggingListener,修改Log相關設置。

對於Tracing,Trace Level保持默認的Warning即可,如果想了解相信過程,可以設置為Information級別,但是需要注意的是,Trace的Log文件增長的非常快,要考慮服務器硬盤空間的承受能力,最好僅在錯誤排查時使用。

點擊ServiceModelTraceListener,修改Log相關設置。

如果想記錄Soap消息的所有內容,可以通過MessageLogging來配置,如下圖:

將LogEntireMessage設置為True即可以記錄Soap消息的所有內容。同時,可以針對需要修改MaxMessagesToLog和MaxSizeOfMessageToLog。

OK,大功告成,File —> Save保存一下,重啟一下IIS。

利用SvcTraceViewer來查看Trace Log

當上述設置都弄好後,利用客戶端程序訪問一下WCF服務,就可以在設置的路徑(即文中的C:\ServiceLogs)中看到Log文件了。下面到了SvcTraceViewer大顯身手的時候了。

查看Message Log

打開SvcTraceViewer,如下:

先來看Message Log,使用SvcTraceViewer打開C:\ServiceLogs底下的Web_messages.svclog文件,如下:

從上圖中可以很清楚地看出客戶端調用了哪些服務的哪些函數,花費了多少時間。

選中一個Activity,可以看到在Description中有兩條記錄,這就是客戶端請求的Soap消息和服務器端返回給客戶端的Soap消息。

通過上圖中圈出的Soap消息的Body部分,可以很清楚地看到客戶端過來的請求。同樣,我們也可以看服務器返回的Soap消息。

這裡因為我把返回的內容做了序列化和壓縮,如果沒有這些,能夠很清楚地看到返回的內容。

查看Trace Log

其實大部分時間排錯還是要通過Trace Log,讓我們打開C:\ServiceLogs底下的Web_tracelog.svclog文件,如下:

通過Trace Log,我們可以查看客戶端和Service服務器詳細的交互過程,也就比較容易地排查錯誤了,如下圖,我們可以定位到錯誤發生的交互。

在XML中包含了我們所需的很多信息,像錯誤內容和錯誤的StackTrace信息。

到此為止就結束了,基本上通過Trace Log,能排查WCF服務中發生的絕大部分錯誤,希望對大家有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved