热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET使用跟踪

asp.net推出了允许直接在代码中编写调试语句的新功能,从而在将应用程式部署到生产服务器时,无需将他们从应用程式中移除。该功能叫做跟踪,允许在页中编写变量或结构、断言是否符合某个条件,或只是

 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"%>
*******************************************************************************

 


图1:跟踪信息


  假如trace的属性值为true,那么当页面被显示时将在页面底部显示跟踪信息。而使用tracemode属性能调整这些信息的显示顺序。tracemode可选的值有:按照时间顺序排列(sortbytime)和按类别(sortcategory),其中,默认值为按照时间顺序排列。

  2.2 应用程式级的配置

  应用程式级的跟踪功能有多种选择,能够通过在config.web文档中的<system.web>下增加一个xml元素<trace>来配置。

  表1:跟踪选项

属性 说明
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页的底部显示,如图1所示。以下是关于这几个部分和他们的说明。由于跟踪信息很多,不可能在一个窗口都显示出来,因此每一类信息由单独的输出窗口显示。

  3.1请求的周详信息

  这部分包含了六项信息,如下表所示:

  表2:请求信息

信息项 说明
session id 会话在该服务器上的唯一标识符
time of request 请求产生的时间
request encoding 请求的编码方式,如unicode
request type get或post请求
status 请求的状态码
response encoding 响应的编码方式,如unicode

 


图2:请求的周详信息


  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:控件树


  3.4 COOKIEs集

  COOKIEs集信息列出了任何和该asp.net的web应用程式相关的COOKIEs。显示的信息包括:name(名字)、value(值)和size(大小)。

  3.5 头消息集

  头消息集包含了任何传到asp.net的网页中的http的头消息,每一项都将都将显示name(名字)和value(值)。

  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跟踪。")


  下面的屏幕截图阐释了当启用页的跟踪时呈现到trace information表上的自定义跟踪语句。warn方法用于生成第一条以红色文本显示的消息,其类别为 render,消息为“张志远在使用warn跟踪”。write方法用于生成具备相同类别的第二条自定义消息,但消息为“张志远在使用write跟踪”。


图4:自定义跟踪记录


  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的强大的跟踪功能的是其中的跟踪信息(这里是指跟踪输出的跟踪信息部分的信息(message))。有了这部分信息就能了解asp.net页开始运行的时间,连同运行该页所花的时间。这些信息对于发现应用程式中的性能瓶颈是很重要的。同时,这些信息也有助于解决有些代码不能正常运行的问题,而这净化藏是因为代码没有按照期望的顺序执行,或是重复执行了。这种错误在传统的asp中往往很难被发现,而有了这部分的跟踪信息,这些错误就变得显而易见了。

  恰当地使用应用程式级的跟踪功能,将大大减少调试web应用程式所花费的时间和精力。如能够在程式中启用跟踪功能,并在web.config中将<trace>元素的pageoutput属性配置为false,之后能够让一些用户使用该应用程式。这样在用户使用过程中,广大程式爱好者能够得到跟踪信息(客户端用户看不到这些信息),从而有利于判断错误的根源。


推荐阅读
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
甘文靖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有