共用方式為


逐步解說:將 ASP.NET 追蹤與 System.Diagnostics 追蹤整合

更新:2007 年 11 月

本逐步解說會描述如何整合 ASP.NET 追蹤技術與 System.Diagnostics 追蹤技術,並將所有追蹤訊息寫入單一追蹤輸出。

您可以使用追蹤來追蹤應用程式的執行流程、在 Web Form 之生命週期內顯示關鍵點的資料,以及探索 (Discovery) Web Form 如何與應用程式的其他不同元件互動。使用追蹤時,您可以檢查送出至應用程式的 HTTP 要求參數、在特定 Web Form 之檢視狀態中儲存的記憶體有多少,以及其他有用的設定檔資訊。

ASP.NET 追蹤機制會寫入顯示在 ASP.NET Web 網頁和 ASP.NET 追蹤檢視器 (Trace.axd) 上的訊息,而 Trace 類別則會用來將追蹤訊息寫入標準 .NET Framework 追蹤輸出 (一般是主控台視窗)。為了讓您更容易追蹤 Web Form 與商務物件 (Business Object) 及其他元件互動的方式,可以將 ASP.NET 追蹤輸出與 System.Diagnostics 追蹤加以整合,將所有追蹤訊息傳送至其中一個輸出。

同時使用 ASP.NET 追蹤和 Trace 類別的常見案例,包括使用中介層商務物件與資料及商務規則互動的 Web 網頁,以及使用如交易和佇列等企業服務的網頁。在這些情況中,商務和企業元件在網頁的成功執行上扮演關鍵角色,並且適合使用單一追蹤輸出,跨越多層應用程式監視網頁的執行流程。

您會在這個逐步解說中使用追蹤,包括修改 Web 網頁和商務物件以寫入追蹤訊息,然後將所有訊息傳送至一個追蹤輸出。

本逐步解說將說明的工作包括下列項目:

  • 建立可以傳回資料至 Web 網頁的自訂商務元件,該元件會從 XML 檔讀取資料。

  • 建立將自訂商務物件做為資料來源參考的 Web 網頁。

  • 啟用參考商務物件之 Web 網頁的追蹤。

  • 將追蹤訊息寫入參考商務物件的 Web 網頁。

  • 在自訂商務物件中寫入 Trace 訊息。

  • 設定 ASP.NET 應用程式以將所有追蹤訊息寫入單一輸出。

  • 讀取追蹤輸出。

必要條件

若要完成這個逐步解說,您需要下列項目:

  • Microsoft .NET Framework 和現有的 ASP.NET 網站。
注意事項:

本逐步解說並未假設您使用設計工具,例如,Microsoft Visual Web Developer Web 程式開發工具或 Microsoft Visual Studio。

建立 Web 網頁和商務物件

在本逐步解說中,您會建立 Default.aspx Web 網頁、AuthorClass 商務物件,以及 Authors.xml XML 資料檔案,在本逐步解說稍後有關追蹤的步驟中將需要該資料檔案。

您可以複製原始程式碼,並將其貼入 ASP.NET 目錄中的檔案,這會建立 Default.aspx Web 網頁、AuthorClass 商務物件,以及 Authors.xml 檔。

若要建立 Default.aspx 網頁

  1. 開啟文字編輯器 (例如,記事本) 並建立新檔案。

  2. 將下列程式碼輸入檔案中。

    <%@ Page Language="VB" %>
    <html>
    <form >
        <asp:objectdatasource
          id="AuthorsObjectDataSource"
    
          typename="PubsClasses.AuthorClass"
          selectmethod="GetAuthors"/>
    
        <asp:gridview
          id="GridView1"
    
          datasourceid="AuthorsObjectDataSource" />
    </form>
    </html>
    
    <%@ Page Language="C#" %>
    <html>
    <form >
        <asp:objectdatasource
          id="AuthorsObjectDataSource"
    
          typename="PubsClasses.AuthorClass"
          selectmethod="GetAuthors"/>
    
        <asp:gridview
          id="GridView1"
    
          datasourceid="AuthorsObjectDataSource" />
    </form>
    </html>
    
  3. 在 ASP.NET 應用程式根目錄中,將檔案儲存為 Default.aspx。

Default.aspx 網頁會使用名為 AuthorClass 的商務物件來與 XML 資料互動。

若要建立 AuthorClass 商務物件

  1. 在應用程式根目錄下,建立名為 App_Code 的目錄。

  2. 在文字編輯器 (例如,記事本) 中開啟新檔案。

  3. 將下列程式碼輸入檔案中。

    Imports Microsoft.VisualBasic
    Imports System
    Imports System.Web
    Imports System.Data
    Namespace PubsClasses
        Public Class AuthorClass
            Private dsAuthors As DataSet = _
                New System.Data.DataSet("ds1")
            Private filePath As String = _
               HttpContext.Current.Server.MapPath("~/App_Data/authors.xml")
            Public Sub New()
                dsAuthors.ReadXml(filePath, Data.XmlReadMode.ReadSchema)
            End Sub
    
            Public Function GetAuthors() As DataSet
                Return dsAuthors
            End Function
        End Class
    End Namespace
    
    using System;
    using System.Web;
    using System.Data;
    namespace PubsClasses
    {
        public class AuthorClass
        {
            private DataSet dsAuthors = new DataSet("ds1");
            private String filePath =
                HttpContext.Current.Server.MapPath("~/App_Data/authors.xml");
    
            public AuthorClass()
            {
                dsAuthors.ReadXml (filePath, XmlReadMode.ReadSchema);
            }
    
            public DataSet GetAuthors ()
            {
                return dsAuthors;
            }
        }
    }
    
  4. 在 App_Code 目錄中,將檔案儲存為 AuthorClass.cs (用於 C#) 或 AuthorClass.vb (用於 Microsoft Visual Basic)。

AuthorClass 使用的資料檔案為 Authors.xml。

若要啟用追蹤並顯示 ASP.NET 追蹤訊息

  1. 在應用程式根目錄下,建立名為 App_Data 的目錄。

  2. 在文字編輯器 (例如,記事本) 中開啟新檔案。

  3. 將下列 XML 資料輸入檔案中。

    XML 檔包含識別資料之資料庫結構的結構描述資訊,這包括索引鍵的主索引鍵條件約束。

    注意事項:

    商務物件可採取任何適合應用程式的方式與資料搭配使用,為方便起見,本逐步解說會使用 XML 檔。

    <?xml version="1.0" standalone="yes"?>
    <dsPubs xmlns="http://www.tempuri.org/dsPubs.xsd">
    <xs:schema id="dsPubs" targetNamespace="http://www.tempuri.org/dsPubs.xsd" xmlns:mstns="http://www.tempuri.org/dsPubs.xsd" xmlns="http://www.tempuri.org/dsPubs.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
        <xs:element name="dsPubs" msdata:IsDataSet="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="authors">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="au_id" type="xs:string" />
                    <xs:element name="au_lname" type="xs:string" />
                    <xs:element name="au_fname" type="xs:string" />
                    <xs:element name="au_phone" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
          <xs:unique name="Constraint1" msdata:PrimaryKey="true">
            <xs:selector xpath=".//mstns:authors" />
            <xs:field xpath="mstns:au_id" />
          </xs:unique>
        </xs:element>
      </xs:schema>
      <authors>
        <au_id>172-32-1176</au_id>
        <au_lname>White</au_lname>
        <au_fname>Gerry</au_fname>
        <au_phone>408 496-7223</au_phone>
      </authors>
      <authors>
        <au_id>213-46-8915</au_id>
        <au_lname>Green</au_lname>
        <au_fname>Marjorie</au_fname>
        <au_phone>415 986-7020</au_phone>
      </authors>
    </dsPubs>
    
  4. 在 App_Data 目錄中,將檔案儲存為 Authors.xml,然後關閉該檔案。

將追蹤訊息加入至 Web 網頁和商務物件

當您已建立 Default.aspx 網頁、Authors.xml 資料檔案,以及 AuthorClass 商務物件後,便可開始使用追蹤。在您將任何追蹤訊息加入至程式碼前,請先啟用 Default.aspx 網頁的追蹤。

若要啟用追蹤並顯示 ASP.NET 追蹤訊息

  1. 在文字編輯器 (例如,記事本) 中開啟 Default.aspx 網頁。

  2. 將 Trace 屬性 (Attribute) 加入至 @ Page 指示詞,然後將 Trace 設定為 true。

    宣告會啟用 Web 網頁的 ASP.NET 追蹤。

    如需詳細資訊,請參閱 HOW TO:啟用 ASP.NET 網頁的追蹤

網頁追蹤現在已啟用,當您在 Web 瀏覽器中檢視網頁時,將會看到 GridView 控制項的後面接著追蹤輸出。在第二個顯示的 [追蹤資訊] 追蹤資料表中,會顯示關於 Web 網頁之執行路徑的詳細資訊。

如需如何讀取追蹤輸出的詳細資訊,請參閱讀取 ASP.NET 追蹤資訊主題。

寫入追蹤訊息

若要進一步了解某些基本 ASP.NET 動作在何處發生,例如,在 Default.aspx 網頁中由 GridView 控制項所執行的資料繫結 (Data Binding),請將追蹤訊息加入至 Web 網頁和 AuthorClass 商務物件。

若要從 Web Form 寫入追蹤訊息

  • 在 Default.aspx Web 網頁中,將下列程式碼輸入 @ Page 指示詞之後、但在 <html> 標記之前的位置。

    <script >
    
    Private Sub Page_Load(sender As Object, e As EventArgs)    
        Trace.WriteLine("ASP.NET TRACE","page_load called.")
        Trace.WriteLine("ASP.NET TRACE","page_load finished.")
    End Sub ' Page_Load
    
    </script>
    
    <script >
    private void page_load(object sender, EventArgs e) {
    
        Trace.WriteLine("ASP.NET TRACE","page_load called.");
        Trace.WriteLine("ASP.NET TRACE","page_load finished.");
    }
    </script>
    
    注意事項:

    根據您所使用的語言而定,可能需要在 @ Page 指示詞中包含語言屬性。

這些追蹤訊息會寫入 ASP.NET 追蹤輸出,當您再次檢視 Default.aspx 網頁時,會在 [追蹤資訊] 區段中的 [開始載入] 和 [結束載入] 之間看到追蹤訊息。[開始載入] 和 [結束載入] 會與 Page_Load 方法關聯。

接下來,您會將追蹤訊息加入至 AuthorClass 商務物件。

若要將追蹤訊息寫入 AuthorClass 商務物件

  1. 將下列程式碼輸入 AuthorClass 建構函式 (Constructor) 中。

    System.Diagnostics.Trace.Write("AuthorClass is created.", "AUTHORCLASS TRACE")
    
    System.Diagnostics.Trace.Write("AuthorClass is created.", "AUTHORCLASS TRACE");
    
  2. 將下列程式碼輸入 AuthorClass.GetAuthors 方法中。

    System.Diagnostics.Trace.Write("GetAuthors called.","AUTHORCLASS TRACE")
    
    System.Diagnostics.Trace.Write("GetAuthors called.","AUTHORCLASS TRACE");
    
    注意事項:

    當您使用 ASP.NET TraceContext.Write 方法時,在該方法的參數清單中,追蹤分類會出現在追蹤訊息的前面。不過,當您使用 .NET Framework 追蹤 Write 方法時,追蹤訊息會出現在追蹤分類的前面。

如果編譯具有 TRACE 編譯器選項的商務物件,則會將這些追蹤訊息寫入系統追蹤輸出。這些追蹤訊息不像 ASP.NET 追蹤訊息一樣會寫入 Default.aspx 網頁,若要測試這一點,請檢視 Default.aspx 網頁,並驗證只有相同之 [ASP.NET TRACE] 訊息顯示在您先前看到的 [追蹤資訊] 資料表中。

在下一章節中,您將了解如何設定 ASP.NET Web 應用程式,以使用啟用的 TRACE 選項自動編譯,並將所有追蹤訊息傳送至 Web 網頁。

將所有追蹤輸出傳送至 Web Form

將包含在 AuthorClass 商務物件中的 Trace 訊息傳送至 ASP.NET 追蹤輸出,可以顯示在要求處理期間建立和操作 AuthorClass 的時間,並讓您以更具整體性之觀點檢視應用程式的運作。若要將 Trace 訊息傳送至 ASP.NET Web 網頁,必須加入 WebPageTraceListener 物件。您可以透過組態檔 (建議) 或以程式設計方式加入追蹤接聽項。如需透過組態檔加入追蹤接聽項的詳細資訊,請參閱 <trace> 的 <listeners> 項目

在下一個程序中,您將需要 Web.config 檔。如果您已經有 Web.config 檔,請略過下一個程序並跳到下下一個,您將在該程序中加入 WebPageTraceListener 物件。

若要建立 Web.config 檔

  1. 開啟文字編輯器 (例如,記事本) 並建立新檔案。

  2. 將下列文字輸入檔案中。

    <!-- Web.Config Configuration File -->
    <configuration>
        <system.web>
            <customErrors mode="Off"/>
        </system.web>
    </configuration>
    
  3. 在與 Default.aspx 相同的目錄中,將檔案儲存為 Web.config。

接下來,您會將 WebPageTraceListener 物件加入至應用程式,以將 Trace 訊息傳送至 ASP.NET 追蹤輸出。

若要透過組態檔為應用程式加入 WebPageTraceListener

  1. 開啟應用程式的 Web.config 檔。

  2. 將下列程式碼放在 Web.config 檔中的 <system.web> 區段後面。

    <system.diagnostics>
      <trace>
        <listeners>
           <add name="WebPageTraceListener" 
                type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </listeners>
      </trace>
    </system.diagnostics>
    

    這個組態區段會將 WebPageTraceListener 物件加入至應用程式的追蹤接聽項集合。

使用應用程式的組態檔加入 WebPageTraceListener,是建議用來加入追蹤接聽項的方法。不過,您也能以程式設計方式加入追蹤接聽項,如果您使用複雜的追蹤邏輯和不同類型的追蹤接聽項來追蹤應用程式,且 WebPageTraceListener 只是許多物件的其中一個時,這個方法會特別有用。

如果您要以程式設計方式將追蹤接聽項加入至應用程式,請建立 Global.asax 檔,並依照下列步驟加入接聽項。

若要建立 Global.asax 檔並以程式設計方式加入追蹤接聽項

  1. 開啟文字編輯器 (例如,記事本) 並建立新檔案。

  2. 將下列程式碼輸入檔案中。

    <%@ Application Language="VB" %>
    <%@ Import Namespace="System.Web" %>
    
    <script >
      Sub Application_Start(sender As Object, e As EventArgs) 
        ' Code that runs when the application is started.
      End Sub
    
      Sub Application_End(sender As Object, e As EventArgs)
        ' Code that runs when the application shuts down.
      End Sub    
    </script>
    
    <%@ Application Language="C#" %>
    <%@ Import Namespace="System.Web" %>
    
    <script >
    
        void Application_Start(Object sender, EventArgs e) {
            // Code that runs when the application is started.
        }
    
        void Application_End(Object sender, EventArgs e) {
            // Code that runs when the application shuts down.
        }        
    </script>
    
  3. 在應用程式的根目錄中,將檔案儲存為 Global.asax。

    這會建立基本 Global.asax,其為編譯過的模組,包含會在每次應用程式啟動或停止時執行的程式碼。

  4. 將下列程式碼輸入 Global.asax 檔的 Application_Start 方法中。

    ' Create a trace listener for Web forms.
    Dim gbTraceListener As New WebPageTraceListener()
    ' Add the event log trace listener to the collection.
    System.Diagnostics.Trace.Listeners.Add(gbTraceListener)
    
    // Create a trace listener for Web forms.
    WebPageTraceListener gbTraceListener = new WebPageTraceListener();
    // Add the event log trace listener to the collection.
    System.Diagnostics.Trace.Listeners.Add(gbTraceListener);
    

    這會以程式設計方式將 WebPageTraceListener 加入至應用程式的追蹤接聽項集合。

  5. 在與 Default.aspx 相同的目錄中,將檔案儲存為 Global.aspx。

完成這些步驟後,WebPageTraceListener 便會加入至應用程式的追蹤接聽項集合中。雖然每當啟用網頁的追蹤時,ASP.NET 便會顯示追蹤訊息,不過,只有當追蹤訊息所在的程式碼是使用明確編譯器參數 (TRACE 參數) 來編譯時,才會寫入 System.Diagnostics 追蹤訊息。換言之,如果您沒有使用 TRACE 參數明確編譯 AuthorClass,將不會看到追蹤訊息,即使已加入 WebPageTraceListener 也一樣。

您可以藉由在 Web.config 檔中加入新區段,將應用程式設定為使用 TRACE 參數自動編譯。

若要自動編譯應用程式並啟用追蹤

  1. 開啟應用程式的 Web.config 檔。

  2. 將下列程式碼放在 Web.config 檔中的 <system.diagnostics> 區段後面。

    <system.codedom>
      <compilers>
        <compiler language="c#;cs;csharp" 
                  extension=".cs" 
                  compilerOptions="/d:TRACE"
                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" />
        <compiler language="VB"
                  extension=".vb" 
                  compilerOptions="/d:Trace=true"
                  type="Microsoft.VisualBasic.VBCodeProvider, System,                                        Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </compilers>
    </system.codedom>
    

    依照預設,這個組態區段會使應用程式以 TRACE 選項編譯所有模組。

如果您現在檢視 Default.aspx 網頁,將會同時看到 ASP.NET 和 System.Diagnostics 追蹤訊息。如果 ASP.NET 和 System.Diagnostics 追蹤訊息沒有顯示,您可能必須重新編譯 AuthorClass 物件。

從追蹤資訊中,您可以看到 AuthorClass 物件已建立,而且在 Web 網頁生命週期的 PreRender 方法期間呼叫該物件的 GetAuthors 方法。您也會看到建立 AuthorClass 物件時有明顯的延遲時間,也就是「開始 PreRender」訊息和「AuthorClass 已建立」訊息之間的時間差異相當大。這是因為 AuthorClass 會在建立期間開啟 Authors.xml 檔並初始化其 DataSet,而這是相當耗時的作業。

在下一章節中,您將了解如何設定 ASP.NET Web 應用程式,以將所有追蹤訊息傳送至 .NET Framework 追蹤輸出。

將所有追蹤輸出傳送至 .NET Framework 追蹤

您可能會想要將 ASP.NET 追蹤訊息傳送至 Trace 訊息的標準輸出,這可以是主控台視窗、磁碟、Windows 事件記錄檔,或任何其他追蹤訊息輸出。您可以在 Web.config 組態檔中啟用此訊息傳送。

若要將所有 ASP.NET 追蹤訊息傳送至系統追蹤輸出

  1. 開啟應用程式的 Web.config 檔。

  2. 將新 writeToDiagnosticsTrace 屬性加入至 <system.web> 底下的 trace 項目,然後將 writeToDiagnosticsTrace 設定為 true。

        <system.web>
          <trace writeToDiagnosticsTrace="true"/>
          <customErrors mode="Off"/>
        </system.web>
    

    這個組態屬性會指示 ASP.NET 追蹤,將 ASP.NET 追蹤訊息傳送至標準系統追蹤輸出機制。

    若要在 ASP.NET Web 網頁以外的內容中檢視 ASP.NET 和 System.Diagnostics 追蹤訊息,請使用 TextWriterTraceListener 物件將追蹤訊息寫入檔案。

    TextWriterTraceListener 物件必須設定為寫入特定檔案,若要執行此動作,請使用 <trace> 適用之 <listeners> 的 <add> 項目 的 initializeData 屬性。

  3. 使用您用來加入 WebPageTraceListener 物件的相同步驟 (本逐步解說中先前所述之「將所有追蹤輸出傳送至 Web Form」的第二個程序),將 TextWriterTraceListener 物件加入至 Web.config 檔,並將 TextWriterTraceListener 設定為寫入應用程式根目錄中名為 Asptesttrace.log 的檔案內。

    假設您並未在 Global.asax 檔中以程式設計方式加入 WebPageTraceListener,則 Web.config 檔的 <system.diagnostics> 區段看起來如下:

    <system.diagnostics>    
      <trace autoflush="true">
        <listeners>
          <add name="WebPageTraceListener" 
            type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          <add name="TestTracer" 
            type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
            initializeData="<app root directory>\Asptesttrace.log" />
        </listeners>
      </trace>
    </system.diagnostics>
    
    注意事項:

    先前步驟中的 initializeData 屬性,具有 ASP.NET 應用程式根目錄的預留位置值。如果您嘗試將追蹤訊息寫入應用程式根目錄以外的檔案,可能會收到安全性例外狀況。依照預設,ASP.NET 不允許將檔案寫入磁碟上應用程式根目錄以外的位置,例如,C:\。此外,您可能需要將追蹤記錄檔的寫入權限授與 ASP.NET 工作處理序帳戶。

    依照預設,必須等到填滿追蹤緩衝區後,才會將追蹤資料寫入目標 (Target) 系統。

  4. 若要在要求 ASP.NET Web 網頁後立即查看追蹤記錄檔中的追蹤資料,請依照先前的步驟將 autoflush 屬性設定為 true,以在每次寫入追蹤資料後清除緩衝區。

    autoflush 屬性的預設值為 false。

  5. 若要以程式設計方式清除追蹤資訊的緩衝區,請呼叫 Flush 方法。

    注意事項:

    對於在本逐步解說中所開發的商務物件,如果您在 Page_Load 方法中呼叫 Flush 方法,且 autoflush 屬性設定為 false,則追蹤記錄檔將不會顯示追蹤資料,因為商務物件會在網頁 Load 事件發生之後呈現。

後續步驟

本逐步解說說明了如何使用 ASP.NET 和 System.Diagnostics 追蹤功能,將所有追蹤訊息傳送至單一輸出。您可能會想試驗更多追蹤接聽項、追蹤輸出和 ASP.NET 檢測功能。例如,您可能會想要進行下列動作:

  • EventLogTraceListener 物件加入至應用程式。

    若要執行這項作業,您應該以程式設計方式或使用組態檔,以用於 WebPageTraceListener 之相同程序加入 EventLogTraceListener 物件。您可以開啟事件記錄檔,檢閱應用程式寫入事件記錄檔的追蹤訊息。

  • 將商務元件變更為使用資料庫資料,而非 XML 檔。您不需要對網頁上的控制項執行任何變更。

請參閱

其他資源

ASP.NET 追蹤

讀取 ASP.NET 追蹤資訊

應用程式層級 ASP.NET 追蹤概觀