【摘要】ASP.NET的跟蹤功能比ASP有了很大的提高,通過跟蹤資訊有利於判斷WEB應用程式中錯誤的根源。本文通過執行個體詳細解釋了ASP.NET的跟蹤模式。
【關鍵字】ASP.NET;跟蹤資訊;Trace
1、引言
傳統ASP最常用的調試方法是使用Response.Write來設定斷點,在WEB頁面上顯示出某些變數當時的值。但是,這種方法存在不少問題。
(1)在程式中布滿Response.Write語句,這些語句可能反而影響調試,也會影響頁面的布局。
(2)調試結束後,還要痛苦地將這些語句刪掉。而在刪除多餘的Response.Write時還要處處小心,防止錯刪必要的Response.Write語句。如果程式有上百行,工作量之大可想而知。
ASP.NET推出了允許直接在代碼中編寫調試語句的新功能,從而在將應用程式部署到生產伺服器時,無需將它們從應用程式中移除。該功能叫做跟蹤,允許在頁中編寫變數或結構、斷言是否符合某個條件,或只是通過頁或應用程式的執行路徑進行跟蹤。為了收集並顯示這些訊息和其他跟蹤資訊,必須啟用頁或應用程式的跟蹤。當啟用跟蹤時,將發生兩件事情:
(1)ASP.NET將一系列診斷資訊表緊接著追加在頁輸出之後。還將該資訊發送到跟蹤查看器應用程式(只有當已啟用了應用程式的跟蹤時)。
(2)ASP.NET在追加效能資料的Trace Information表中顯示自訂診斷訊息。指定的診斷資訊和跟蹤訊息追加在發送到請求瀏覽器的頁輸出中。或者,可以在單獨的跟蹤查看器(trace.axd)中查看該資訊,該查看器顯示給定應用程式中每頁的跟蹤資訊。當ASP.NET處理頁請求時,該資訊可以協助查清錯誤或不希望得到的結果。
只有在啟用了跟蹤後才處理並顯示跟蹤語句。可以控制是否將跟蹤顯示到頁上、顯示到跟蹤查看器或既顯示到頁上又顯示到跟蹤查看器。
2、ASP.NET的跟蹤模式的配置
為了能使用跟蹤功能,就要在頁面或整個應用程式的範圍內啟用它。
2.1 頁面級的配置
要在頁面級啟用跟蹤功能,就要在@Page指令中設定Trace屬性。如下所示:
*******************************************************************************
<%@ Page Language="vb" Trace="true" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1"%>
*******************************************************************************
圖1:跟蹤資訊
如果Trace的屬性值為true,那麼當頁面被顯示時將在頁面底部顯示跟蹤資訊。而使用TraceMode屬效能調整這些資訊的顯示順序。TraceMode可選的值有:按照時間順序排列(SortByTime)和按類別(SortCategory),其中,預設值為按照時間順序排列。
2.2 應用程式級的配置
應用程式級的跟蹤功能有多種選擇,可以通過在config.web檔案中的<system.web>下增加一個XML元素<trace>來設定。
表1:跟蹤選項
| 屬性 |
說明 |
| Enabled |
如果應用程式中能使用跟蹤功能為true,否則為false |
| PageOutput |
如果跟蹤資訊顯示在應用程式的頁面上和跟蹤視窗中則為true,否則為false。注意:該屬性將不影響已啟動的跟蹤功能頁 |
| RequestLimit |
說明伺服器所能存放的跟蹤請求的最大個數。預設為10個 |
| TraceMode |
指名按某種順序顯示跟蹤資訊。按SortByTime(時間順序)或按使用者定義型別的SortByCategory(字母順序)。預設為按時間順序。 |
| LocalOnly |
如果為true,跟蹤視窗(trace.axd)只能顯示在Web伺服器的主機上,否則為false。預設為true。 |
*******************************************************************************
<configuration>
<system.web>
<trace Enabled="true" PageOutPut="false" requestLimit="20" traceMode="SortByTime" localOnly="true"/>
…
</system.web>
</configuration>
*******************************************************************************
雖然例子中使用了所有的屬性,但是並非每個屬性都必須設定。而且頁面級的配置將覆蓋應用程式級的配置。比如,在應用程式級禁用了跟蹤功能,但在頁面級又啟用這個功能,那麼跟蹤資訊仍會顯示在頁面上。
RequstLimit屬性設定了將被記錄的在追蹤記錄檔中的請求的個數,這可以避免日誌量過大。如果localOnly屬性設為true,那麼只在伺服器上看到跟蹤資訊。這使得只有伺服器端可以跟蹤應用程式,而其他使用者卻看不到跟蹤資訊。