【摘要】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,那麼只在服務器上看到跟蹤信息。這使得只有服務器端可以跟蹤應用程序,而其他用戶卻看不到跟蹤信息。