trace对页启用跟踪
對頁啟用跟蹤
打開 頁并切換至“設計”視圖。
在“屬性”列表中,單擊“DOCUMENT”。
這將顯示該頁的屬性。
將“Trace”設置為 true。
跟蹤設置實際上是作為 @ Page 指令的一部分實現的。切換至“源”視圖并查看頁的第一行,您會看到這一點。@ Page 指令與下面的內容相似:
Visual Basic 復制代碼 <%@ Page language="VB" Trace="true" %>?
C# 復制代碼 <%@ Page language="C#" Trace="true" %>按 Ctrl+F5 運行該頁。
該頁顯示在瀏覽器中。在頁的頂部,您將看到您放置在頁上的文本和控件。在文本和控件下面,您可以看到跟蹤輸出,它顯示了有關頁處理的很多細節,包含下列信息:
-
頁運行時所發生的頁事件序列。
-
頁上的控件的類型、名稱和大小。
-
Cookie 及其內容。
-
服務器變量,它是瀏覽器發送到服務器的所有信息的集合。
注意,在“請求詳細信息”(跟蹤信息的第一塊內容)的下面,“請求類型”為“GET”。這指示這是頁的第一次運行;即,它不是回發。
在框中,鍵入一個名稱,然后單擊“提交”。
“請求類型”現在是“POST”。這指示這是頁的回發。單擊“提交”不會使名稱顯示。
關閉瀏覽器。
您可以使用自定義跟蹤輸出來幫助您了解頁的邏輯。
添加自定義跟蹤輸出
將下面突出顯示的行添加到您在本演練前面的“添加代碼”部分中創建的 buttonDisplayName_Click 處理程序:
Visual Basic 復制代碼 Protected Sub buttonDisplayName_Click(ByVal sender As Object, _ByVal e As EventArgs)Trace.Warn("debugging", "Start buttonDisplayName Click handler")labelName.Text = Server.HtmlEncode(textName.Text)Response.Cookies("username").Value = labelName.Text Trace.Warn("debugging", "End buttonDisplayName Click handler") End Sub?
C# 復制代碼 protected void buttonDisplayName_Click(Object sender, EventArgs e) { Trace.Warn("debugging", "Start buttonDisplayName Click handler");labelName.Text = Server.HtmlEncode(textName.Text);Response.Cookies["username"].Value = labelName.Text; Trace.Warn("debugging", "End buttonDisplayName Click handler"); }Warn 方法將您的自定義消息添加到跟蹤輸出。盡管 TraceContext 類還提供了 Write 方法,但是 Warn 方法更加有用,因為輸出是以彩色顯示的。
按 Ctrl+F5 運行該頁。
單擊“提交”。
當您檢查跟蹤輸出時,您將注意到輸出不包含紅色文本。據此您可以推斷,“提交”的 Click 處理程序未在調用。
未調用處理程序的最常見原因是控件尚未正確綁定到事件處理程序。本例中也是如此——雖然您添加了事件處理代碼,但是未將“提交”的 Click 事件綁定到處理程序。通常情況下,當雙擊“設計”視圖中的控件時,Visual Web Developer 會將事件綁定到該控件。
關閉瀏覽器。
在“源”視圖中,將下面突出顯示的屬性添加到 <asp:button> 元素:
復制代碼 <asp:button id="buttonDisplayName" runat="server" text="Submit"οnclick="buttonDisplayName_Click" />按 Ctrl+F5 運行該頁。
在框中,輸入一個名稱,然后單擊“提交”。
您的自定義跟蹤輸出以紅色顯示在“跟蹤信息”部分中,它列出了該頁所經歷的處理步驟。
此部分中的輸出按照頁處理過程中消息的發生順序顯示消息。您在 Click 事件處理程序中添加了自己的消息,該處理程序在 Begin Raise PostBackEvent 和 End Raise PostBackEvent 行之間進行處理。包含自定義消息不僅可以讓您知道處理程序已被調用,而且還能讓您了解該代碼是在頁處理周期中的哪個環節執行的。
自定義消息旁邊的類別為 debugging,這是您在調用 Warn 方法時指定的類別。您可以指定想要的任何類別,并且如果有用,可將頁的 TraceMode 屬性設置為 SortByCategory 值以便于在跟蹤輸出中查找類別。
此外,注意您輸入的名稱顯示在標簽中。
現在,“提交”的 Click 處理程序已運行正確,可以測試頁中其余的代碼(包括 Cookie)了。
測試 Cookie
關閉瀏覽器。
按 Ctrl+F5 運行該頁。
您期望的行為是讓您輸入的名稱自動出現在標簽中,因為“提交”的 Click 處理程序設置了一個 Cookie,并且 Page_Load 處理程序在下一次回發過程中會讀取該 Cookie。但是,標簽決不會從該 Cookie 設置。
如果您編寫了一個 Cookie,但是它不是持久的,則錯誤通常是您沒有為 Cookie 設置一個顯式過期日期。沒有過期日期的 Cookie 是一個會話 Cookie。會話 Cookie 在瀏覽器關閉后就不再保留在服務器內存中。換言之,該 Cookie 未寫入到瀏覽器中。在下面的步驟中您將更正此問題。
關閉瀏覽器。
在“源”視圖中,將下面突出顯示的行添加到 buttonDisplayName_Click 處理程序中:
Visual Basic 復制代碼 Protected Sub buttonDisplayName_Click(ByVal sender As Object, _ByVal e As EventArgs)Trace.Warn("debugging", "Start buttonDisplayName Click handler")labelName.Text = Server.HtmlEncode(textName.Text)Response.Cookies("username").Value = labelName.Text Response.Cookies("username").Expires= _ DateTime.Now.AddMinutes(30)Trace.Warn("debugging", "End buttonDisplayName Click handler") End Sub?
C# 復制代碼 protected void buttonDisplayName_Click(Object sender, EventArgs e) {Trace.Warn("debugging", "Start buttonDisplayName Click handler");labelName.Text = Server.HtmlEncode(textName.Text);Response.Cookies["username"].Value = labelName.Text; Response.Cookies["username"].Expires= DateTime.Now.AddMinutes(30);Trace.Warn("debugging", "End buttonDisplayName Click handler"); }新行將 Cookie 顯式設置為 30 分鐘后過期。
按 Ctrl+F5 運行該頁。
在框中,輸入一個名稱,然后單擊“提交”。
該名稱顯示在瀏覽器中。在“響應 Cookie 集合”跟蹤輸出中,您會看到正在設置該 Cookie。
關閉瀏覽器。
按 Ctrl+F5 運行該頁。
這一次,將自動填入名稱。在“響應 Cookie 集合”跟蹤輸出中,現在您可以看到瀏覽器正在將該 Cookie 傳遞到您的網頁。
如果您只使用單個頁,將頁設置為顯示跟蹤輸出會非常有用。但是,如果您在應用程序中使用了多個頁,則為每個頁啟用和禁用跟蹤就可能不太方便。而且,當頁正在運行時在頁中顯示跟蹤輸出信息會造成混亂。無論如何,您不會希望頁對應用程序用戶顯示跟蹤輸出。
您不僅可以在頁一級配置跟蹤,還可以在應用程序一級進行配置。設置應用程序級跟蹤有兩個好處:
-
您可以同時為所有頁啟用和禁用跟蹤。
-
您可以在單獨的瀏覽器窗口(跟蹤查看器)中顯示跟蹤輸出,而不是將其作為頁輸出的一部分顯示。
啟用應用程序級跟蹤后,ASP.NET 會將所有頁的跟蹤輸出保留在緩存中。您可以設置選項來指定緩存多少頁的跟蹤輸出,以及設置您是希望保留最新的項還是最舊的項。然后,您可以在瀏覽器中調用跟蹤查看器并選擇要檢查的跟蹤輸出。
在演練的這一部分中,您將啟用應用程序級跟蹤并使用跟蹤查看器檢查跟蹤輸出。
啟用應用程序級跟蹤
切換至“源”視圖,然后在頁頂部的 @ Page 指令中刪除 Trace="true"。
| 應移除該屬性;不要只是將其設置為 false。否則,本演練的后續步驟將不會正確工作。 |
在“網站”菜單上單擊“ASP.NET 配置”。
出現“ASP.NET 網站管理”工具。
單擊“應用程序配置”。
在“調試和跟蹤”下,單擊“配置調試和跟蹤”,然后選擇“捕獲跟蹤信息”復選框。
此設置啟用應用程序級跟蹤。
對于本演練,您可以將其余設置保留為默認值。ASP.NET 將緩存最多 10 個跟蹤輸出項(對于單頁,可以有 10 個回發,對于多頁,每頁的回發數更少),并緩存最新的項。
關閉 ASP.NET 網站管理工具。
現在您可以運行原始頁,并以用戶查看方式使用它。但是,如有必要,您可以同時在單獨的瀏覽器窗口中查看跟蹤輸出。
在單獨的瀏覽器窗口中查看跟蹤輸出
按 Ctrl+F5 運行該頁。
注意該頁不再顯示跟蹤輸出。該頁顯示為用戶將看到的樣子。
在框中輸入一個名稱,然后單擊“提交”以確認該頁運行正確。
打開一個新的瀏覽器窗口。
在瀏覽器的“地址”框中,鍵入站點的 URL,用 trace.axd 替換您正在使用的頁的名稱。
例如,如果頁的 URL 為:
復制代碼 http://localhost:8081/WebSite/Default.aspx鍵入下列內容:
復制代碼 http://localhost:8081/WebSite/trace.axd| 執行此任務的快速方式是復制原始頁的 URL,然后只更改頁名稱。 |
瀏覽器顯示當前緩存的跟蹤項。
對最后(最新)的跟蹤項單擊“查看詳細信息”。
瀏覽器顯示的跟蹤輸出與您在本演練的前面部分中所看到的輸出類似,不同之處在于這些輸出不是追加在頁的結尾。
切換到包含原始頁的瀏覽器實例。
在框中鍵入一個新名稱,然后單擊“提交”。
此操作將生成一個新的跟蹤日志項。
切換到包含信息的瀏覽器實例。
在瀏覽器中,單擊“后退”返回到列表跟蹤項,然后單擊“刷新”更新項列表。
出現一個新項,表示您在步驟 7 中創建的跟蹤輸出。
關閉這兩個瀏覽器窗口。
如您所見,跟蹤輸出包含很多信息,有時比您所需要的還要多。例如,您可能想將跟蹤輸出限制為只是您自己創建的跟蹤輸出。跟蹤可讓您讀取跟蹤緩沖區的內容,并有選擇地顯示您所需要的信息。
若要創建自定義跟蹤輸出,請處理 Trace 對象的 TraceFinished 事件。在相應的事件處理程序中,您可以讀取跟蹤緩沖區。
創建自定義跟蹤輸出
在您已使用的頁中,將下面突出顯示的代碼添加到 Page_Load 處理程序中:
Visual Basic 復制代碼 Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _Handles Me.LoadIf Not Request.Cookies("username") Is Nothing ThenlabelName.Text = Request.Cookies("username").ValueEnd If AddHandler Trace.TraceFinished, AddressOf Me.TraceFinished If IsPostBack Then Trace.Write("debugging", "Page_Load (Postback)") Else Trace.Write("debugging", "Page_Load (First Time)") End If End Sub?
C# 復制代碼 void Page_Load(object sender, EventArgs e) {if(Request.Cookies["username"].Value != null){labelName.Text = Request.Cookies["username"].Value;} Trace.TraceFinished += new TraceContextEventHandler(this.TraceFinished); if (Page.IsPostBack) { Trace.Write("debugging", "Page load (postback)"); } else { Trace.Write("debugging", "Page load (first time)"); } }該代碼執行以下兩個功能:
-
它將頁中的一個方法綁定到 Trace 對象的 TraceFinished 事件,當該頁的跟蹤輸出完成時會引發該事件。您將在下一步中編寫該方法。
-
它寫入一些跟蹤信息。
創建下面的方法以處理 TraceFinished 事件:
Visual Basic 復制代碼 Sub TraceFinished(ByVal sender As Object, _ByVal e As TraceContextEventArgs)Dim traceRecord As TraceContextRecordFor Each traceRecord In e.TraceRecordsIf traceRecord.Category = "debugging" ThenResponse.Write("<BR>" & traceRecord.Message)End IfNext End Sub?
C# 復制代碼 void TraceFinished(object sender, TraceContextEventArgs e) { foreach(TraceContextRecord traceRecord in e.TraceRecords){ if(traceRecord.Category == "debugging") { Response.Write("<br>" + traceRecord.Message);} } }此代碼在跟蹤輸出完成時執行。跟蹤緩沖區可以作為集合在 e 事件參數的 TraceRecords 屬性中使用。代碼遍歷該集合,并顯示類別為 debugging 的任何跟蹤記錄的值;在本演練中,您已將所有自定義跟蹤輸出的類別設置為 debugging。
在演練中,此時,網站已配置為對所有頁啟用跟蹤,但是跟蹤輸出被定向至跟蹤查看器而不是頁。如果以另一種方式配置網站(例如,在頁中顯示跟蹤輸出),請執行“啟用應用程序級跟蹤”這一過程(在本演練前面的“在跟蹤查看器窗口中顯示跟蹤信息”部分)中的步驟。
現在可測試自定義跟蹤輸出。
測試自定義跟蹤輸出
按 Ctrl+F5 運行該頁。
當頁顯示在瀏覽器中時,會出現消息“頁加載(第一次)”,但是未出現其他跟蹤輸出。
單擊“提交”。
將出現消息“頁加載(回發)”、“啟動 buttonDisplayName Click 處理程序”和“結束 buttonDisplayName Click 處理程序”。
| 如果超出了在 trace 元素(ASP.NET 設置架構)的 requestLimit 屬性中指定的緩存請求數,則 TraceFinished 事件將不會引發,并且您不會在網頁上看到這些消息。 |
轉載于:https://www.cnblogs.com/panjun-Donet/archive/2010/01/25/1655613.html
總結
以上是生活随笔為你收集整理的trace对页启用跟踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 濡沫江湖紫金矿石哪里有挖
- 下一篇: 京东极速版如何绑定微信账号