网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.如何在ASP.NET中获取随机生成的c.
.如何在webform.aspx.cs中控制用户.
.ASP.Net2.0 GridView 多列排序,.
.ASP.NET 2.0高级数据处理之数据绑.
.用完HttpWebResponse时别忘了调用.
.如何防止插入删除表造成的数据库.
.一个通用的分页类.
.ASP.NET与MySQL数据库简明图示入.
.ASP.NET基本编程习惯.
.巧用VS2005解决VS2005网站发布不.
.动态控制Page页的Head信息.
.简单的SQL Server数据库数据读取.
.未能加载文件或程序集Microsoft..
.用.net开发不同操作系统下应用的.
.ActiveReports for .NET 简单使用.
.根据自定义字符串来缓存(部分)页.
.ASP.NET 2.0“插件”说.
.涉及网络编程时,需要用到的几个常.
.利用模版生成html页.
.将Asp.net从VS2003以及VS2002工程.

追踪ASP.NET代码里的bug

发表日期:2004-3-23


Web开发中一个棘手的问题是调试。在ASP或者简单JavaScript的时代,开发人员会利用print语句来追踪代码里的问题。随着微软引入ASP.NET,这一方法发生了改变,因为它包含了大量的特性,可以利用TraceContext类更加轻松地调试Web页面。

选择追踪的范围
 
在ASP.NET应用程序里,你可以启动对单个页面或者整个Web应用程序进行追踪的能力。Web.config这个文件用来启动在应用程序这一级别进行的追踪。下面就用到了web.config文件里的追踪元素:

<trace enabled="false" requestLimit="10" pageOutput="false"
traceMode="SortByTime" localOnly="true" />

现在让我们更加仔细地看看其各个属性:

enabled:用来启动(真)和关闭(伪)应用程序这一级别的追踪。
requestLimit:用来描述保存在内存里的追踪数量。
pageOutput:用来指示追踪信息需要(真)还是不需要(伪)附加在每页之后。如果选择了伪,那么追踪信息可以在专门的追踪页面——trace.axd里查看。
traceMode:用来确定如何显示追踪信息。在缺省状态下,它被设置为按时间顺序显示,但是它也可以按类别(SortByCategory)显示。
localOnly:用来指示远程调试可用(伪)或者不可用(真)。
然而,如果应用程序里只有一个页面,那么你就会在追踪的时候碰到问题。在这种情况下,你可以在页面的命令里加上下面的追踪属性,启动对单个页面的追踪:

<%@ Page language="c#" trace="true" tracemode="SortByCategory"
Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"
Inherits="WebApplication1.WebForm1" %>

要注意trace和tracemode属性会和它们在web.config文件里对应的属性发生冲突。如果你还不清楚哪个设置是优先的,那么我告诉你,页面设置会取代web.config的设置,所以你在追踪整个应用程序的时候要启动它,而在追踪所选页面的时候禁用它。是选择页面还是应用程序这一级别(或者是把两者结合起来)进行追踪要根据情况来决定。

处理输出
一旦决定了需要追踪的级别,你就要开始接收追踪的结果了。如果是正在追踪整个应用程序,那么你可以在trace.axd页面里查看所有的追踪结果(具体有多少要取决于你用requestLimit属性维持的数量)。同样的,对单个页面的追踪进行完之后,你可以查看单个页面的追踪。

追踪的输出结果分为五个部分:

请求细节(Request Details):这一部分包括会话的ID、请求时间、编码、请求类型(get、post等等),以及状态码。
追踪信息(Trace Information):用来显示请求的细节,这包括和ASP.NET页面相关的各种事件。
控件树(Control Tree):用来显示页面内使用的控件;这包括其大小和保存在ViewState里的相关字节数。
Cookie集(Cookies Collection):页面所用的cookie的列表。
标题集(Headers Collection):和请求相关的HTTP标题,包括主机(Host)、Cookie和用户代理(User-Agent)。
服务器变量:和请求相关的服务器环境变量的完整列表。

在下面的例子里,我列出了追踪结果的一部分信息。(它包括追踪结果的标题集部分。)

 
Headers Collection
Name Value
Connection Keep-Alive
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-us
Cookie ASP.NET_SessionId=vnadwr45jvrfhv55gbdygobs; LastVisited2=3/1/2004
 2:11:35 PM
Host localhost
User-Agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR
 1.1.4322)

从这个追踪结果可以看出,发出请求的客户端使用英语和Internet Explorer 6.0,并安装了.NET框架1.1。

加入用户信息
缺省的追踪能力在很多情况下都很有用处,但是其他的情况可能要求获得页面的更多信息。你可以利用TraceContext类的Write(写入)和Warn(警告)方法向追踪日志里添加用户信息:

Write:向追踪日志写入信息。
Warn:向追踪日志写入信息,但是用红色显示写入的信息。
每种方法都在承担着多种任务,大多数基本的句法都会接受简单的信息并将其插入到追踪日志里。这些方法让你能够很轻松地在需要的地方放上Trace.Write和Trace.Warn语句,从而向追踪输出里加入用户信息。其输出被包括在追踪输出的追踪信息部分里。(我觉得使用Warn方法可以更容易地找到我添加的内容,因为它们是以红色显示的。)

不需要重新编译
另一个非常好的特性是,在完成追踪之后,你不需要删除追踪元素;只需要禁用追踪就行了,这样追踪语句会被忽略。当产品中出现问题的时候,其优势就体现出来了。一旦转化成为了产品,你可以激活在应用程序这一级别的追踪,而不对单个页面进行追踪(把pageOutput设置成伪),并通过trace.axd页面来查看追踪结果,这样用户就不会被打扰了。

最后,追踪特性会增加应用程序的负担,这反过来会影响到程序的性能。由于这个原因,你应该只有在需要的时候才在投入生产的应用程序里启动它,而且要(在追踪完成后)尽快禁用它。


--------------------------------------------------------------------------------
本文作者:Tony Patton的职业生涯开始于应用程序开发员,并已经获得了Java、VB、Lotus和XML的认证,以增加其专业知识。

上一篇:ASP.NET对IIS中的虚拟目录进行操作 人气:21962
下一篇:在asp.net中为Web用户控件添加属性和事件 人气:35201
浏览全部ASP.NET的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐