WCF 第九章 診斷 額外配置選項
2011-02-22 08:28 DanielWise 閱讀(1104) 評論(0) 收藏 舉報先前部分描述配置日志和診斷的基本方法。在這一部分,我們將描述其他幾個你應該在配置你的WCF應用時注意的選項。
共享監聽器
先前的例子為每個源(消息和跟蹤)使用唯一的監聽器。你可能選擇配置一個共享監聽器并連接到多個源,將輸出統一為一個單獨元素,比如一個XML文件。列表9.4顯示如何將跟蹤和消息日志配置為使用同樣的輸出文件。
列表9.4 向一個共享監聽器跟蹤并記錄消息
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="App_tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="diagnostics" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
<filter type="" />
</add>
</sharedListeners>
</system.diagnostics>
對每個源來說,添加一個名字與共享監聽器匹配的監聽器。在這個情況下,我們要匹配”診斷”監聽器,它將向同樣的diagnostics.svclog文件寫跟蹤記錄和消息。
消息過濾器
默認情況下,所有在<messageLogging>配置元素中確定的層次的相關消息都會被記錄。然而,為了減少記錄時的重復信息并減少日志文件的大小,你可能想要只減少那些與你配置的一系列規則匹配的消息。
消息過濾器是在一條消息將被記錄之前必須滿足條件的XPath表達式。不滿足XPath查詢的消息會被排除,除了及其嚴重的錯誤消息,它們不被消息過濾器影響。
通過向<messageLogging>中添加一個<filters>節點來確定過濾器,如列表9.5所示。
列表9.5 為消息日志添加一個過濾器
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true"
logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"
maxMessagesToLog="4000">
<filters>
<add nodeQuota="1000"
xmlns:s12="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa10="http://www.w3.org/2003/08/addressing"
/s12:Envelope/s12:Header/was10:Action[startswith(text(), 'http://Microsoft.ServiceModel.Samples/ICalculator')]></add>
</filters>
</messageLogging>
</diagnostics>
這個例子可能看起來有些復雜,但是它整個是為了定義在XPath表達式中使用的命名空間。命名空間是為了SOAP信封和尋址元數據用的。表達式檢查每條消息的頭來保證它會被轉發給我們SelfHost 例子中ICalculator服務中的一個。其他服務的消息會被忽略。
跟蹤源自動刷新
如果你想要每條跟蹤記錄或者消息記錄操作在每次跟蹤過程中自動完成(寫到硬盤中),在<System.diagnostics>配置節點的<trace>元素中開啟自動舒心功能,如列表9.6所示。
列表9.6 開啟自動刷新功能
<trace autoflush="true" />
自動刷新功能默認關閉。在生產環境中開啟自動更新之前,要確定需要處理在一個測試環境中的影響,因為它會導致費用增加,特別是消息傳輸增加。
性能計數器
三種不同的WCF相關性能計數器與.NET Framework 3.5 一起安裝。在性能監控器中,你可以在ServiceModelService,ServiceModelEndpoint和ServiceModelOperation下面看到這些計數器。你可以選擇通過配置來為你的應用程序開啟這些,在列表9.7中顯示。
列表9.7 開啟性能計數器更新
<diagnostics performanceCounters="ServiceOnly">
<messageLogging
logMalformedMessages="true"
logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="true" />
</diagnostics>
通過在<system.serviceModel><diagnostics>節點中包含performanceCounters屬性來開啟性能計數器。驗證設置是Off(默認),ServcieOnly, 和All.強烈建議在開發和診斷目的下開啟所有的性能計數器,但是因為性能計數器與一些需要較多費用的操作一起使用,ServiceOnly 建議在正常的生產操作中使用,這將僅開啟那些在ServiceModelService 列表中的。
| 提示 獲取性能計數器 你需要運行一個WCF服務或者客戶端實例來在性能監控應用中添加性能計數器。確保性能計數器在配置文件中開啟并啟動你的服務,然后添加你想要獲取的計數器,并接著運行你的客戶端應用程序。 |
Windows 設備管理(WMI)
WCF支持通過WMI暴露設置和狀態的功能,很多常用的應用程序管理程序,比如微軟操作管理器和HP OpenView使用WMI來訪問多種跨企業的系統。Windows PowerShell也有支持WMI的功能,允許你為特殊的管理和監控場景寫自定義的腳本程序。
你可以在如列表9.8的配置文件中為你的WCF應用程序開啟WMI供應者服務。
列表9.8 開啟WMI 供應者服務
<diagnostics wmiProviderEnabled="true"
performanceCounters="ServiceOnly">
<messageLogging logMalformedMessages="true"
logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="true" />
</diagnostics>
開啟WMI與開啟性能計數器類似。向<system.serviceModel><diagnostics>節點添加wmiProviderEnabled屬性。在它被開啟以后,管理程序將可以監控并管理你的WCF應用程序。
作者:DanielWise
出處:http://www.rzrgm.cn/danielWise/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
浙公網安備 33010602011771號