3.6 表单消息集
只有当ASP.NET网页中包含了一个表单,且该表单已被提交到服务器,这类信息才被显示出来。它包含两个很重要的信息。
(1) 该网页的Viewstate,即表单中所有控件的状态摘要。
(2) 所有控件的Name(名称)和Value(值)。
4、编写跟踪消息
ASP.net包括Trace对象(与Response、Request或Context对象类似),该对象允许编写当启用页或整个应用程序的跟踪时出现的调试语句。
ASP.NET使用TraceContext类来存储有关请求的信息、它的控件层次结构和跟踪信息。跟踪信息包括页请求的某些生命周期阶段以及选择包括的任何自定义语句。通过Page.Trace属性或Control.Context属性可以使用TraceContext类。前者在开发ASP.NET页时可用。后者在要将跟踪语句包括在自定义服务器控件或要从页以外(如global.asax文件)包括跟踪语句时可用。
TraceContext类的接口很简单,只有一个构造函数、两个属性和两个方法。当然还有一些从Object类继承下来的属性和方法。Page对象中的Trace属性就是一个TraceContext类的实例。TraceContext类提供两种方法:Write和Warn,这两种方法允许将语句写入跟踪记录。每种方法都被重载并允许指定跟踪类别、文本消息和可选错误信息。这两种方法之间的唯一区别就是Warn方法用红色显示其文本。
当在对Write或Warn方法的调用中指定类别时,可以使用该类别对跟踪语句进行排序。
将重载每种方法,并且每种方法都有三个版本。如果当调用Warn或Write时只包括一个字符串参数,则ASP.NET将此作为消息对待。如果包括两个参数,将第一个作为类别对待,编程时可以使用该参数对启用跟踪时显示在Trace Information表中的消息进行排序。第三个参数为Exception类型,包含该请求的错误信息。
4.1 在页中将自定义跟踪消息写入跟踪记录
(1)在页的代码声明块或代码隐藏类中,使用Trace属性调用TraceContext方法之一;
(2)为跟踪语句指定可选的category参数。可以使用该类别对所显示的跟踪语句进行排序;
(3)为跟踪语句指定message参数。这可以是字符串或方法;
(4)指定可选的errorInfo参数,该参数包含有关页中任何错误的信息;
下面的TraceContext.Warn方法示例定义类别为Render,跟踪消息为“张志远在使用Warn跟踪”。
[C#]
Trace.Warn("Render", "张志远在使用Warn跟踪。");
[Visual Basic]
Trace.Warn("Render", "张志远在使用Warn跟踪。")
4.2 在自定义服务器控件中将自定义跟踪消息写入跟踪记录
(1)在服务器控件代码中,使用Context属性调用TraceContext方法之一;
(2)为跟踪语句指定可选的category参数。可以使用该类别对所显示的跟踪语句进行排序;
(3)为跟踪语句指定message参数;
(4)指定可选的errorInfo参数,该参数包含有关页中任何错误的信息;
下面的示例使用Warn方法将自定义语句写入服务器控件的跟踪记录。类别是ZZY Class,消息是“张志远在跟踪”。
[C#]
Context.Trace.Write("ZZY Class","张志远在跟踪。");
[Visual Basic]
Context.Trace.Write("ZZY Class","张志远在跟踪。")
4.3 只有在启用了跟踪时跟踪消息写入记录
在有些情况下,只有当启用了跟踪时,才需要将语句传递到Write或Warn方法。TraceContext对象具有布尔属性(IsEnabled),它允许有条件地调用这些方法。
创建一个If语句,该语句检查是否为代码所属的页或应用程序启用了跟踪,然后创建一个当Trace.IsEnabled属性返回true时执行的条件语句。
下面的示例确认启用页的跟踪,然后使用Write方法从数据库中将有关信息写入Trace Information表。
Private Sub Page_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
If Trace.IsEnabled Then
Trace.Write("Prod", "张志远在跟踪")
End If
End Sub
5、小结
通过以上的介绍,已经能获得跟踪信息了,那么如何利用它们呢?这要根据具体情况而定。大部分跟踪信息(如cookies、头信息和服务器变量)在传统的ASP中也有。只不过它们不像ASP.NET含在跟踪查看器中。
最能体现ASP.NET的强大的跟踪功能的是其中的跟踪信息(这里是指跟踪输出的跟踪信息部分的信息)。有了这部分信息就能了解ASP.NET页开始运行的时间,以及运行该页所花的时间。这些信息对于发现应用程序中的性能瓶颈是很重要的。同时,这些信息也有助于解决有些代码不能正常运行的问题,而这净化藏是因为代码没有按照期望的顺序执行,或者是重复执行了。这种错误在传统的ASP中往往很难被发现,而有了这部分的跟踪信息,这些错误就变得显而易见了。
恰当地使用应用程序级的跟踪功能,将大大减少调试Web应用程序所花费的时间和精力。如可以在程序中启用跟踪功能,并在web.config中将<trace>元素的PageOutPut属性设置为false,之后可以让一些用户使用该应用程序。这样在用户使用过程中,广大程序爱好者可以得到跟踪信息(客户端用户看不到这些信息),从而有利于判断错误的根源。