技术开发 频道

ASP.NET的跟踪模式详解

【IT168技术文档】

  ASP.net的跟踪功能比ASP有了很大的提高,通过跟踪信息有利于判断Web应用程序中错误的根源。本文通过实例详细解释了ASP.NET的跟踪模式。
 
  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"%>
  如果Trace的属性值为true,那么当页面被显示时将在页面底部显示跟踪信息。而使用TraceMode属性能调整这些信息的显示顺序。TraceMode可选的值有:按照时间顺序排列(SortByTime)和按类别(SortCategory),其中,默认值为按照时间顺序排列。
 
  2.2 应用程序级的配置
 
  应用程序级的跟踪功能有多种选择,可以通过在config.web文件中的<system.web>下增加一个XML元素<trace>来设置。
 
  跟踪选项
 
  ·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,那么只在服务器上看到跟踪信息。这使得只有服务器端可以跟踪应用程序,而其他用户却看不到跟踪信息。
 
  3、ASP.net的跟踪模式的输出
 
  跟踪输出是由TraceContext对象产生的,并分几部分在ASP.NET页的底部显示。由于跟踪信息很多,不可能在一个窗口都显示出来,因此每一类信息由独立的输出窗口显示。
 
  3.1请求的详细信息
 
  这部分包含了六项信息,如下表所示:
 
  Session Id 会话在该服务器上的唯一标识符
  Time of request 请求产生的时间
  Request encoding 请求的编码方式,如Unicode
  Request type Get或Post请求
  Status 请求的状态码
  Response Encoding 响应的编码方式,如Unicode
 
  3.2 跟踪信息
 
  这类信息包含了跟踪过程中应用程序或ASP.NET引擎输出的跟踪信息或警告。默认情况下,ASP.NET引擎将输出每个实践开始和结束时的信息,如PreRender、SaveViewState。输出的信息包括:Category(类别)、Message(消息)、Form First(网页开始运行算起的时间间隔)以及与Form Last(上一次输出的跟踪信息项的时间间隔)。这些信息项的显示顺序由@Page的TraceMode属性或TraceContext对象的TraceMode属性值决定的。
 
  跟踪信息部分非常重要,我将在下一节中详细阐述。
 
  3.3 控件树
 
  控件树信息用树状结构显示了该ASP.NET页中的所有元素,便于广大程序员理清控件之间的从属关系,从而有助于判断作用域和所有权。每个元素显示的信息有:控件的Control Id(标识符)、Type(类型)、Render Size Bytes(大小)和ViewState的字节数等。
 
  3.4 Cookies集
 
  Cookies集信息列出了所有与该ASP.NET的Web应用程序相关的cookies。显示的信息包括:Name(名字)、Value(值)和Size(大小)。
 
  3.5 头消息集
 
  头消息集包含了所有传到ASP.NET的网页中的HTTP的头消息,每一项都将都将显示Name(名字)和Value(值)。

0
相关文章