Поделиться через


Пошаговое руководство. Интеграция методов трассировки ASP.NET и System.Diagnostics

Обновлен: Ноябрь 2007

В данном пошаговом руководстве описываются способы интеграции методов трассировки ASP.NET с методами трассировки System.Diagnostics и записи всех сообщений трассировки в единый выходной поток трассировки.

Трассировка используется для отслеживания хода выполнения приложения путем вывода данных в критических точках рабочего цикла веб-формы с целью определения, как веб-форма взаимодействует с другими компонентами приложения. С помощью трассировки можно проверить параметры HTTP-запросов, направляемых приложению, объем памяти, используемой в режиме представления для конкретной веб-формы и получить другие полезные сведения.

Механизм трассировки ASP.NET пересылает сообщения на веб-страницы ASP.NET и средству просмотра трассировки ASP.NET (Trace.axd), в то время как класс Trace используется для вывода сообщений в стандартный поток вывода трассировки .NET Framework (как правило, в окно консоли). Чтобы упростить отслеживание взаимодействия веб-форм с бизнес-объектами и другими компонентами, можно интегрировать вывод трассировки ASP.NET с трассировкой System.Diagnostics, направив все трассировочные сообщений в один из этих выходных потоков.

Чаще всего трассировка ASP.NET используется совместно с классом Trace в приложениях, которые содержат веб-страницы, использующие объекты среднего уровня бизнес-логики для взаимодействия с данными и бизнес-правилами, и веб-страницы, использующие такие службы уровня предприятия, как транзакции и очереди. В этих случаях бизнес-компоненты и компоненты уровня предприятия играют ключевую роль в работе страницы и мониторинге (с помощью единого потока вывода трассировки) потока выполнения страниц на нескольких уровнях приложения.

В данном пошаговом руководстве демонстрируется использование трассировки. Будут изменены веб-страница и бизнес-объект для записи сообщений трассировки, а затем все сообщения направлены в выходной поток трассировки.

В данном пошаговом руководстве представлены следующие задачи:

  • Создание пользовательского бизнес-компонента, который может возвращать данные веб-странице. Компонент зачитывает данные из XML-файла.

  • Создание веб-страницы, которая использует пользовательский бизнес-объект как источник данных.

  • Разрешение трассировки для веб-страницы, использующей бизнес-объект.

  • Запись сообщений трассировки на веб-страницу, использующую бизнес-объект.

  • Запись сообщений Trace в пользовательский бизнес-объект.

  • Настройка приложения ASP.NET для записи всех сообщений трассировки в единый поток вывода.

  • Чтение вывода трассировки.

Обязательные компоненты

Для выполнения инструкций данного пошагового руководства необходимы следующие компоненты.

  • Платформа Microsoft .NET Framework и существующий веб-узел ASP.NET.
b0ectfxd.alert_note(ru-ru,VS.90).gifПримечание.

В данном пошаговом руководстве не предполагается использование конструкторов, например Microsoft Visual Web Developer Web или Microsoft Visual Studio.

Создание веб-страницы и бизнес-объекта

В этом пошаговом руководстве будут созданы веб-страница Default.aspx, бизнес-объект AuthorClass и XML-файл данных Authors.xml, который требуется для выполнения следующих шагов данного руководства, использующих трассировку.

Вы можете копировать и вставлять исходный код в файлы, находящиеся в каталоге вашего приложения ASP.NET. Будут созданы веб-страница Default.aspx, бизнес-объект AuthorClass и файл Authors.xml.

Создание страницы Default.aspx

  1. Откройте текстовой редактор, например «Блокнот», и создайте новый файл.

  2. Вставьте в него следующий код.

    <%@ Page Language="VB" %>
    <html>
    <form runat="server">
        <asp:objectdatasource
          id="AuthorsObjectDataSource"
          runat="server"
          typename="PubsClasses.AuthorClass"
          selectmethod="GetAuthors"/>
    
        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="AuthorsObjectDataSource" />
    </form>
    </html>
    
    <%@ Page Language="C#" %>
    <html>
    <form runat="server">
        <asp:objectdatasource
          id="AuthorsObjectDataSource"
          runat="server"
          typename="PubsClasses.AuthorClass"
          selectmethod="GetAuthors"/>
    
        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="AuthorsObjectDataSource" />
    </form>
    </html>
    
  3. Сохраните этот файл в корневой каталог приложения ASP.NET с именем Default.aspx.

Страница Default.aspx для взаимодействия с XML-данными использует бизнес-объект AuthorClass.

Создание бизнес-объекта 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. Сохраните этот файл с именем AuthorClass.cs (для C#) или AuthorClass.vb (для Microsoft Visual Basic) в каталог App_Code.

Класс AuthorClass использует файл данных Authors.xml.

Включение трассировки и отображения сообщений трассировки ASP.NET

  1. В корневом каталоге приложения создайте подкаталог App_Data.

  2. В текстовом редакторе, например «Блокноте», создайте новый файл.

  3. Введите в этот файл следующие XML-данные.

    XML-файл содержит сведения о схеме, которая идентифицирует структуру базы данных, в том числе ограничение первичного ключа.

    b0ectfxd.alert_note(ru-ru,VS.90).gifПримечание.

    Бизнес-компоненты могут работать с данными любым способом, допускаемым приложением. 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 и закройте редактор.

Добавление сообщений трассировки на веб-страницу и в бизнес-объект

После создания веб-страницы Default.aspx, файла данных Authors.xml и бизнес-объекта AuthorClass можно начать работать с трассировкой. Перед тем, как добавить в код какие-либо сообщения трассировки, разрешите трассировку для страницы Default.aspx.

Включение трассировки и отображения сообщений трассировки ASP.NET

  1. Откройте файл Default.aspx в текстовом редакторе, например в «Блокноте».

  2. Добавьте атрибут Trace к директиве @ Page и присвойте ему значение true.

    Это объявление разрешает трассировку ASP.NET для веб-страницы.

    Дополнительные сведения см. в разделе Практическое руководство. Включение трассировки для страницы ASP.NET.

Трассировка страницы теперь разрешена и при просмотре страницы в веб-обозревателе будет видно, что выходные данные трассировки поступают в элементе управления GridView. Вторая таблица трассировки — Trace Information — показывает сведения о потоке событий веб-страниц.

Дополнительные сведения о том, как читать выходные данные трассировки, см. в разделе Reading ASP.NET Trace Information.

Создание сообщений трассировки

Чтобы лучше понимать, где выполняются те или иные базовые действия ASP.NET, например привязка к данным, осуществляемая элементом управления GridView на странице Default.aspx, добавьте сообщения трассировки к веб-странице и бизнес-объекту AuthorClass.

Создание сообщений трассировки на веб-странице

  • На веб-странице Default.aspx введите следующий код после директивы @ Page, но перед тегом <html>.

    <script runat="server">
    
    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 runat="server">
    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>
    
    b0ectfxd.alert_note(ru-ru,VS.90).gifПримечание.

    Возможно, в зависимости от используемого языка, потребуется включить в директиву @ Page атрибут языка.

Эти сообщения трассировки записываются в выходной поток трассировки ASP.NET. Затем на странице Default.aspx они будут отображены в разделе Trace Information между «Begin Load» и «End Load». Сообщения «Begin Load» и «End Load» связаны с методом Page_Load.

Теперь добавим сообщения трассировки к бизнес-объекту AuthorClass.

Создание сообщений трассировки в бизнес-объекте AuthorClass

  1. Добавьте следующий код в конструктор AuthorClass.

    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");
    
    b0ectfxd.alert_note(ru-ru,VS.90).gifПримечание.

    При использовании метода TraceContext.Write ASP.NET в списке параметров этого метода категория трассировки предшествует сообщению трассировки. Однако при использовании метода трассировки Writeплатформы .NET Framework сообщение трассировки предшествует категории трассировки.

Если при компиляции бизнес-объекта использовался параметр компилятора TRACE, эти сообщения записываются в системный поток вывода трассировки. Сообщения трассировки не записываются на страницу Default.aspx, когда есть сообщения трассировки ASP.NET. Чтобы это проверить, просмотрите страницу Default.aspx и убедитесь, что в таблице Trace Information присутствуют только сообщения категории «ASP.NET TRACE».

В следующем подразделе будет показано, как настроить веб-приложение ASP.NET для автоматической компиляции с параметром TRACE и направить все сообщения трассировки на веб-страницу.

Перенаправление всех выходных данных трассировки на веб-форму

Перенаправление в выходной поток трассировки ASP.NET сообщений Trace, создаваемых в бизнес-объекте AuthorClass, позволяет посмотреть, когда создается и используется этот бизнес-объект во время обработки запроса, и дает более целостный взгляд на поведение приложение. Чтобы перенаправить сообщения Trace на веб-страницу ASP.NET, необходимо добавить объект WebPageTraceListener. Можно добавить прослушиватель трассировки либо путем конфигурирования (рекомендуется), либо программными средствами. Дополнительные сведения о добавлении прослушивателя трассировки через конфигурирование см. в разделе Элемент <listeners> для элемента <trace>.

Для выполнения следующей процедуры потребуется файл Web.config. Если у вас уже есть файл Web.config, пропустите ее и перейдите к той, в которой добавляется объект WebPageTraceListener.

Создание файла Web.config

  1. Откройте текстовой редактор, например «Блокнот», и создайте новый файл.

  2. Вставьте в него следующий код.

    <!-- Web.Config Configuration File -->
    <configuration>
        <system.web>
            <customErrors mode="Off"/>
        </system.web>
    </configuration>
    
  3. Сохраните файл с именем Web.config в тот же каталог, в котором находится файл Default.aspx.

Затем мы добавим к приложению объект 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 runat="server">
      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 runat="server">
    
        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. Вставьте следующий код в метод Application_Start файла Global.asax.

    ' 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. Сохраните файл Global.aspx в тот же каталог, в котором находится Default.aspx.

С помощью этих действий в коллекцию прослушивателей трассировки приложения был добавлен объект WebPageTraceListener. Хотя ASP.NET отображает сообщения трассировки всегда, когда трассировка включена для страницы, сообщения трассировки System.Diagnostics записываются, только когда код, в котором они находятся, компилируется с явно заданным переключателем компилятора TRACE. Другими словами, если при компилировании класса AuthorClass явно не указать переключатель TRACE, сообщения трассировки не будут выводиться, даже при добавленном прослушивателе WebPageTraceListener.

Можно настроить приложение так, чтобы оно автоматически компилировалось с переключателем TRACE, добавив новый раздел в файл Web.config.

Настройка компиляции приложения с автоматически разрешенной трассировкой

  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.

Трассировка показывает, что во время работы метода PreRender жизненного цикла веб-страницы создается объект AuthorClass и вызывается его метод GetAuthors. Можно видеть, что временная задержка при создании объекта AuthorClass значительна: между сообщением «Begin PreRender» и сообщением «AuthorClass is created.» большая разница во времени. Это происходит вследствие того, что при создании объекта AuthorClass открывается файл Authors.xml и инициализируется DataSet, что является относительно времяемкой операцией.

В следующем подразделе будет показано, как настроить веб-приложение ASP.NET для перенаправления всех сообщений трассировки в выходной поток трассировки .NET Framework.

Перенаправление всех сообщений трассировки в выходной поток трассировки .NET Framework.

Перенаправить сообщения трассировки ASP.NET можно в стандартный поток вывода для сообщений Trace, который может являться консольным окном, диском, журналом событий Windows или любым другим потоком вывода сообщений трассировки. Перенаправление сообщений включается в файле конфигурации Web.config.

Перенаправление всех сообщений трассировки ASP.NET в системный выходной поток.

  1. Откройте файл Web.config приложения.

  2. Добавьте новый атрибут writeToDiagnosticsTrace к элементу трассировки в разделе <system.web> и присвойте ему значение true.

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

    Этот атрибут конфигурации указывает ASP.NET перенаправлять сообщения трассировки в стандартный системный поток вывода трассировки.

    Чтобы просмотреть сообщения трассировки ASP.NET и System.Diagnostics вне контекста страницы ASP.NET, используйте объект TextWriterTraceListener для записи сообщений трассировки в файл.

    Объект TextWriterTraceListener должен быть сконфигурирован для записи в указанный файл. Для этого используется атрибут initializeData элемента «add», описанного в разделе Элемент <add> для элемента <listeners> для элемента <trace>.

  3. Чтобы настроить запись в файл с именем Asptesttrace.log, находящийся в корневом каталоге приложения, добавьте объект TextWriterTraceListener в файл Web.config и настройте объект TextWriterTraceListener, выполнив ту же последовательность действий, которая использовались для добавления объекта WebPageTraceListener во второй процедуре в приведенном выше подразделе «Перенаправление всех выходных данных трассировки на веб-форму».

    Предполагается, что программными средствами в файл Global.asax не добавляется прослушиватель WebPageTraceListener, тогда раздел <system.diagnostics> файла Web.config будет выглядеть примерно следующим образом:

    <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>
    
    b0ectfxd.alert_note(ru-ru,VS.90).gifПримечание.

    Атрибут initializeData содержит путь к корневому каталогу приложения ASP.NET. При попытке записать сообщения трассировки в файл, расположенный не в корневом каталоге приложения, может возникнуть исключение безопасности. По умолчанию ASP.NET запрещает запись файлов в папки диска, которые находятся вне корневого каталога приложения, например C:\. Кроме того, можно предоставить разрешения на запись в журнал трассировки для учетной записи рабочего процесса ASP.NET.

    Перед записью данных трассировки в целевой поток по умолчанию требуется ожидать полного заполнения буфера трассировки.

  4. Чтобы увидеть данные трассировки в журнале трассировки непосредственно после выполнения запроса к странице ASP.NET, присвойте атрибуту autoflush значение true, как было сделано на предыдущем шаге — буфер будет сохраняться при каждой записи данных трассировки.

    По умолчанию атрибут autoflush имеет значение false.

  5. Чтобы сохранить буфер трассировки программными средствами, вызовите метод Flush.

    b0ectfxd.alert_note(ru-ru,VS.90).gifПримечание.

    Для бизнес-объектов, которые были разработаны в данном пошаговом руководстве, если вызывается метод Flush из метода Page_Load и атрибут autoflush установлен в false, журнал трассировки не будет показывать данные трассировки, потому что бизнес-объект отображается после возникновения события Load страницы.

Следующие действия

В данном пошаговом руководстве было показано, как работать возможностями трассировки ASP.NET и System.Diagnostics для перенаправления всех сообщений трассировки в единый поток вывода. Возможно, вы захотите дополнительно поэкспериментировать с прослушивателями трассировки, потоками вывода и инструментальными средствами ASP.NET. Например, попробуйте выполнить следующие действия.

  • Добавьте в приложение объект EventLogTraceListener.

    Объект EventLogTraceListener добавляется либо программными средствами, либо через файл конфигурации, с помощью той же процедуры, что и для объекта WebPageTraceListener. Затем откройте журнал событий и просмотрите сообщения трассировки, записываемые в него приложением.

  • Измените бизнес-компонент так, чтобы он работал базой данных вместо XML-файла. Не потребуется вносить какие-либо изменения в элементы управления на странице.

См. также

Другие ресурсы

ASP.NET Tracing

Reading ASP.NET Trace Information

Application-Level ASP.NET Tracing Overview