學習筆記:asp.net中使用跟蹤(trace)
主要內容:
什么是“跟蹤”
為什么要使用跟蹤?
開啟頁面內的跟蹤
開啟整個網站的跟蹤
查看跟蹤信息
開啟跟蹤后和asp.net ajax沖突怎么辦
一、什么是“跟蹤”(來自于MSDN)
跟蹤是一種在應用程序運行時監視其執行情況的方式。當開發 .NET 應用程序時,可以在其中添加跟蹤和調試檢測功能,并且在開發應用程序時和部署應用程序后,都可以使用該檢測功能。利用 Trace 和 Debug 類,可以將有關錯誤和應用程序執行的信息記錄到日志、文本文件或其他設備中,以便在隨后進行分析。
二、為什么要使用跟蹤?
在asp的時代,如果需要了解程序在運行時的某些狀態、變量的值,通常都是在頁面上采用Response.Write來輸出的方式。這么做的原因,絕大多數都是因為asp薄弱的運行、開發環境造成的。這這樣的做的結果是,隨意在頁面上輸出造成頁面的混亂不說,程序中添加的Response.Write還非常不容易管理,一旦有什么遺漏的話,就會給客戶造成不必要的誤解。
而asp.net的跟蹤功能,不僅可以在程序運行的各個階段,跟蹤程序的狀態和變量的值,另外,它還有asp.net本身所支持的各項管理功能。它可以和Aspx頁面一起顯示,也可以通過專門的方式在另外的地方呈現。據我目前所知,它有以下優點:
1、既可以整個網站統一管理,也可以在單個頁面啟動。通過配置web.config,可以啟用整個網站的跟蹤,也可以在頁面上采用。
2、不影響頁面的布局和呈現。
3、全面反映cookies和session的狀態,這是我第一次采用跟蹤的一個原因。
4、完整的反應各個頁面事件的過程和執行的時間。
三、開啟頁面內的跟蹤
1、在<@page>中采用Trace="true"
2、在代碼里添加“Trace.IsEnabled = true;”
3、添加自己的跟蹤信息:
Trace.Warn("abc"); //Warn 顯示的是紅色的信息
Trace.Write("def"); //write顯示的是普通顏色的信息
四、開啟全站的跟蹤
在web.config中添加
<system.web>
<trace enabled="true" />
</system.web>
五、查看跟蹤信息
1、如果開啟了頁面內的跟蹤,那么跟蹤信息可以直接在頁面內容的下面顯示出來。
2、如果開啟了全站的跟蹤,可以通過“http://網站名/”或者“http://網站名/站點名/” (vs 2005里面新建的網站,在調試的時候就是以后者的形式出現的) 后面跟上“trace.axd”來查看。例如:http://localhost:5508/trace.axd
3、開啟全站跟蹤并且顯示在頁面:
<system.web>
<trace enabled="true" pageOutput="true" />
</system.web>
4、開啟全站跟蹤并且顯示在“輸出”窗口:
<system.web>
<trace enabled="true" pageOutput="false" writeToDiagnosticsTrace="true"/>
</system.web>
<system.diagnostics>
<trace>
<listeners>
<add name="consolse" type="System.Diagnostics.ConsoleTraceListener"/>
</listeners>
</trace>
</system.diagnostics>
六、開啟跟蹤后和asp.net ajax沖突怎么辦
在使用UpdatePanel的頁面上開啟了頁面跟蹤或者開啟了全站跟蹤時,pageOutput="true"就會出現Sys.WebForms.PageRequestManagerParserErrorException異常。
原因是頁面跟蹤時有Response.Write。
解決辦法是,不用頁面跟蹤或者全站跟蹤時,pageOutput="false"。需要查看跟蹤信息時,用trace.axd。
七、性能
網站開啟了跟蹤,那么肯定是要低性能的。
但是在頁面添加一些自定義的跟蹤信息,應該對性能的影響很微小了。
附錄
1、如何:使用跟蹤查看器查看 ASP.NET 跟蹤信息
http://msdn.microsoft.com/zh-cn/vcsharp/wwh16c6c(VS.80).aspx
2、《Essential ASP.NET 2.0中文版 》7.11 ASP.NET 2.0中的跟蹤
http://book.csdn.net/bookfiles/392/10039214519.shtml
3、UpdatePanel 出現了Sys.WebForms.PageRequestManagerParserErrorException異常
Microsoft JScript 運行時錯誤: Sys.WebForms.PageRequestManagerParserErrorException: 無法分析從服務器收到的消息。之所以出現此錯誤,常見的原因是: 在通過調用 Response.Write() 修改響應時,將啟用響應篩選器、HttpModule 或服務器跟蹤。詳細信息: 分析附近的“XXX|XXX|XXX”時出錯。
http://www.cnblogs.com/simplenl/archive/2008/08/12/1266120.html
文章中提到了出現異常的各種原因,其中之一就是開啟了網頁的trace
4、MSDN:《跟蹤應用程序和在應用程序中插入檢測點》《ASP.NET 跟蹤概述》
ms-help://MS.MSDNQTR.v90.chs/dv_fxdebug/html/773b6fc4-9013-4322-b728-5dec7a72e743.htm
ms-help://MS.MSDNQTR.v90.chs/dv_vwdcon/html/1552561d-887c-4002-8770-f92662cdf416.htm#ReadingTraceInformation
流浪是注定的宿命;
ASP.NET故障排除
• 沒有找到程序、沒有顯示ASP.NET的結果
或瀏覽器試圖下載文件
• 不能顯示頁面:HTTP錯誤403
• 找不到頁面:HTTP錯誤404
• 脫機時Web頁面無效
• 得到服務器錯誤的錯誤語句
• 其他問題
沒有找到程序、沒有顯示ASP.NET的結果
或瀏覽器試圖下載文件
• 如果試圖將頁面作為硬盤上的本地文件來瀏覽,
就會遇到這樣的問題。在Windows Explorer中單
擊文件時也會遇到此問題。原因是用戶試圖不以
通過Web服務器請求的方式訪問ASP.NET頁面。
• 解決方法:需要在URL中引用Web服務器。
• 如果在URL中引用也出現這個問題,一般情況下
是ASP.NET的安裝問題,如重新安裝IIS后沒有再
安裝ASP.NET。
不能顯示頁面:HTTP錯誤403
• 可能是用戶沒有權限來執行包含在
ASP.NET中的代碼。
• 解決方法:需要修改IIS的相關設置。
找不到頁面:HTTP錯誤404
• 可能是在瀏覽器中輸入了拼寫錯誤的URL。
• 解決方法:輸入正確的URL。
提示:
• 也有可能是文件后綴名錯誤,如用NotePad
寫的代碼,錯誤保存為*.aspx.txt。
脫機時Web頁面無效
• 可能是用戶試圖請求一個頁面,但當前沒
有與Internet的連接。
• 解決方法:單擊“連接”按鈕;或者調整瀏覽
器的“脫機”設置。
得到服務器錯誤的錯誤語句
• 可能是ASP.NET代碼錯誤。
• 解決方法:修改錯誤代碼。
Web訪問失敗
• IE選項中,選擇代理時,沒有把“對于本地
地址不使用代理服務器”選中
其他問題:
• 可能是IIS安裝不正確。
殺手锏:
ASPNET_regiis
• 應用程序級調試模式
– Web.config
– <compilation debug=“true”/>
• 頁面調試模式
– HTML頁面中添加以下代碼:
<%@ Page Language=“c#” Debug=“true”
%>
– VS.NET中Document的Debug屬性設置為true
• .NET框架自己帶的調試器
• DbgCLR.exe
• 位于:Program files\Mircosoft Visual
Studio .NET\FrameWorkSDK\GuiDebug
CLR調試器使用的4個步驟
• 打開要調試的文件
• 將調試器附加到ASP.NET進程中
• 設置斷點
• 使用調試器工具來操縱應用程序
在遠程計算機上調試ASP.NET
Web 應用程序
• 調試器在遠程使用方法與在本地使用相同
• 遠程調試的必需條件:
– 必需安裝Visual Studio remote debugging 組件
– 用戶必需是Debugger User 組或Administrator
– 必需具有運行ASP.NET計算機的管理員權限
– Use DCOM (not TCP/IP) for C/C++
2.4 ASP.NET調試啟動故障
• 無法在Web 服務器中啟動調試
• 您沒有調試服務器的權限。
• 發送調試HTTP 請求時發生服務器端錯誤
• 沒有對項目進行配置以接受調試。
• 未正確安裝調試器。
• 服務器不支持對ASP.NET 或ATL 服務器應用程
序的調試。
• 訪問被拒絕。檢驗您是否是管理員或某個組成員。
• 無法啟動ASP.NET 或ATL 服務器調試。
• 訪問被拒絕。
2.4 ASP.NET調試啟動故障
無法在Web 服務器中啟動調試
• 未將IIS 應用程序配置為使用“集成
Windows身份驗證”。確保已選中“身份驗證
方法”對話框中的“集成Windows身份驗證”
復選框
• 檢查IIS 的“保持HTTP連接” 選項。如果它
是關閉的,則可能需要將其打開,再嘗試
調試。
2.4 ASP.NET調試啟動故障
您沒有調試服務器的權限。
• 原因1:確保已啟用Integrated Windows
Authentication。可能的原因是僅為IIS 的
Directory 安全啟用了Basic authentication。
• 原因2:如果您在使用Integrated Windows
Authentication,則需要確保您的用戶帳戶
能夠完全控制IIS 的目錄。
2.4 ASP.NET調試啟動故障
發送調試HTTP 請求時發生服務器端錯誤
• Web 應用程序沒有應用程序名。為此,請
使用IIS MMC 來檢查Web 項目的屬性,
確保Web 項目具有應用程序名。
• 如果使用的是NTFS 文件格式,則確保
“aspnet”具有“wwwroot”或虛擬目錄文件夾
上的適當權限,才能訪問和寫入這些文件
夾。
2.4 ASP.NET調試啟動故障
• 沒有對項目進行配置以接受調試。
– 原因: 在項目屬性中未啟用Asp.net 調試
• 未正確安裝調試器
– 未正確安裝.NET Framework 應用程序。
• 服務器不支持對ASP.NET 或ATL 服務器
應用程序的調試。
– IIS和VS.NET安裝順序有錯,用
ASPNET_Regiis 重新注冊
2.4 ASP.NET調試啟動故障
訪問被拒絕。
• 檢驗您是否是管理員或某個組成員。您可
能不是該計算機上Debugger Users 組的成
員。將您的用戶帳戶添加到計算機上的
Debugger Users 組中即可解決此錯誤。
• 您可能是Debugger Users 組的成員,但是
您不具有調試aspnet 輔助進程的權限,因
為您不是aspnet 用戶帳戶或
Administrators 組的成員。將您的用戶帳戶
添加到機器上的Administrators 組即可解決
此問題。
2.4 ASP.NET調試啟動故障
無法啟動ASP.NET 或ATL 服務器調試。
• 原因1:您可能安裝了IIS Lockdown 工具。如果
這樣,則查找urlscan.ini 文件,并將DEBUG
(區分大小寫)添加到[allowverbs] 部分中。
• 原因2:如果將域控制器用作服務器,并且項目
是使用機器名(非完整域名)創建的,則可能需
要將項目的URL 更改為完整域名。
• 原因3:如果將IIS 設置為使用專用IP(例如
Web site identification,可以在IIS MMC 的IIS
設置中找到這一選項),則可能看到這條錯誤消
息。原因4:web.config 文件的中的值太大。默
認單位是千字節而非字節,因此如果更改此數
字,使用了錯誤的單位,則可能導致調試問題。
試用Response跟蹤
• 新建web應用程序
• 添加用戶名稱、密碼文本框、登錄按鈕
• 為登錄按鈕添加事件
• 在事件中用Response.Write來跟蹤值是否
正確
跟蹤
• 便利的來展示應用程序ASP.NET Web的信
息
• 兩種方式跟蹤:
– Page-level 跟蹤
• 在瀏覽器中輸出
• 不影響頁面性能
– Application-level 跟蹤
• 許可一次察看多個請求
• 自動為程序中的所有頁開啟page-level
2.1 在頁面級使用跟蹤
• 在HTML頁添加以下代碼
<%@ Page Trace=“true” %>
• VS.NET中的設置
– Document的Trace屬性設置為true
跟蹤輸出
• 請求內容:包含關于頁面請求的信息
• 跟蹤信息:顯示實際的跟蹤信息
• 控制樹:顯示頁面使用的不同控件
• Cookies集合:顯示頁面中的所有
Cookie
• 標題集合:顯示客戶端傳送到服務器端
的連同請求的各種HTTP標題
• 服務器變量:顯示服務器變量集合的所
有成員
2.2 寫到跟蹤日志
• Trace.Write:
• Trace.Warn:紅色顯示
注:
• Trace對象對應的類為TraceContext
• Trace.IsEnabled屬性可以得到跟蹤的當前
狀態
Application-Level 跟蹤日志
• 為所有頁開啟page-level跟蹤
• 收集統計狀態信息及控件層次
• 開啟跟蹤需按以下方式修改Web.config文件:
<configuration>
<system.web>
<trace enabled="true"/>
</system.web>
</configuration>
• 輕松察看多個請求的響應細節
支持的屬性
設置true | false, 指示跟蹤是否僅對本地用戶或所有用戶
(default is true)
localOnly
設置SortByTime | SortByCategory, 指示顯示排序方式
(default is SortByTime)
traceMode
requestLimit 跟蹤請求在服務器端的存儲數量(default is 10)
設置true | false, 用于標記跟蹤信息是否在頁面被顯示,包
括在每個頁面直接輸出,或是通過trace.axd文件輸出。
(默認為關閉)
pageOutput
enabled 設置true | false, 用于標記跟蹤是否開啟(默認為關閉)
Value Description