1、代码跟踪 错误处理 本章目标 使用追踪的原因 使用 ASP.NET 跟踪可以查看关于 ASP.NET 页的单个 请求的诊断信息。 使用跟踪还可以直接在代码中编写调试语句,而不必 在将应用程序部署到成品服务器时从应用程序中移除 这些语句。 代码跟踪 TRACE元素 通过 Page指令中的 Trace属性控制是否在页面中启用追踪 。 如果启用了跟踪,在请求该页时, ASP.NET 会为该页附加 一系列的表,表中包含关于该页请求的执行详细信息。 默认情况下禁用跟踪。 代码跟踪 TRACE元素 TraceContext类 页面用 TraceContext类暴露的方法生成其跟踪信息。在执行 一个 HTT
2、P请求时, ASP.NET会创建一个 TraceContext类的实例。 Trace 对象 (TraceContext类的实例 )通过 HttpContenxt 类的 Trace属性和 Page类的 Trace属性暴露出来。 TraceContext类有一个很简单的接口,它只有两个属性和一些方法。 两个属性分别是 IsEnabled 和 TraceMode属性: 将 TraceMode 设置为 SortByTime,以便按跟踪消息的处理顺序对跟踪 消息进行排序。 将 TraceMode 设置为 SortByCategory,以便在页面或代码的 TraceContext.Warn 和 Trace
3、Context.Write 方法调用中指定的类别对 消息排序。 TraceContext类 TraceContext.Write 方法将跟踪信息写入跟踪日志。 TraceContext.Warn 方法将警告信息写入跟踪日志。与 Write 不同,所有警告在日志中均显示为红色文本。 TraceContext类 为整个站点配置追踪 在应用程序的 Web.config 文件进行配置,可以方便实现除显式 禁用跟踪的页之外的所有页中显示跟踪信息。 由于不必对各个页进行更改以启用或禁用跟踪,因此设置应用 程序级别跟踪非常有用。 属性 说 明 enabled 指定是否 为应 用程序启用跟踪 localOnl
4、y 指定跟踪 查 看器 (Trace.axd) 是否只用于主机 Web 服 务 器 mostRecent 最近的 应 用程序 级别 跟踪 输 出,是否 丢 弃超出 requestLimit 限制的旧 跟踪数据 pageOutput 每一 页 的 结 尾是否呈 现 跟踪 输 出 requestLimit 跟踪 请 求的数目, 最大 10000,默 认 10 traceMode 显 示跟踪信息的 顺 序 writeToDiagnosticsTrace 是否将 ASP.NET 跟踪消息 转发 到 System.Diagnostics 跟踪基 础结 构 ,以便注册的任何 侦 听器 显 示 Trace
5、消息 为整个站点配置追踪 在配置文件中配置 在浏览器的地址栏中,在站点根目录后面输入 trace.axd ,浏览器显示当前缓存的跟踪项。 自定义跟踪输出 在页面加载事件里注册跟踪事件 protected void Page_Load(object sender, EventArgs e) Trace.TraceFinished+=new TraceContextEventHandler(Trace_TraceFinished); void Trace_TraceFinished(object sender, TraceContextEventArgs e) foreach (TraceCont
6、extRecord record in e.TraceRecords) Response.Write(string.Format(“0:1“,record.Category,record.Message); 实现跟踪事件的方法 错误处理 对于一个 Web应用程序来说,出错是在所难免的, 因此我们应该未雨绸缪,为可能出现的错误提供恰 当的处理。 除了 C#中的 try/catch之外, ASP.NET提供了四种处 理错误的方式: lPage_Error事件处理方法 lPage.ErrorPage属性 lWeb.config文件的 配置项。 lGlobal.asax文件的 Application_
7、Error事件处理方法 Page.Error事件 注册事件: Page.Error 获得错误信息: Server.GetLastError() 清除错误对象: Server.ClearError() 节点 在 Web.Config文件的 节点中配置 mode有三种: On:开启错误处理,任何地方都适用 Off:关闭错误处理,任何地方都禁用 RemoteOnly:服务器端禁用错误处理,客户端才能看到错误页面 defaultRedirect:如果发生的异常没有在 节点 statusCode属性指定的范围之内,则跳转到此页面 节点: statusCode错误代码 ,redirect处理页面 Page
8、.ErrorPage属性 可以在任何时候设置页面的 ErrorPage属性,从而确定页 面发生错误的时候会重定向至哪个页面。 为了使 ErrorPage 起作用, 的 mode属性 必须设置为 On。 也可以在 指令中设置 ErrorPage。 Application_Error事件 在 Global.asax文件中的 Application_Error处理函数中捕获 应用程序异常 调用 Server.GetLastError().GetBaseException()获得异常 将异常保存在 Application“error”中 调用 Server.ClearError()清除已经处理的异常
9、跳转到处理页面显示错误信息 错误处理优先级 在异常发生的时候,错误处理方式根据优先级从高到低排 序: lPage_Error事件处理方法 lPage.ErrorPage属性 lApplication_Error事件处理方法 l配置项。 如果多个处理错误的机制同时存在,应用程序会按照优先 级找到第一个满足条件的错误机制。 各个错误处理的关系 首先,要让 ErrorPage属性能够发挥作用,必须将 配置项中的 mode属性设为 “On” 其次,虽然 Page_Error事件处理方法排在最前面,但是 ,如果忽略了 Server.ClearError()方法的话,仍然会 引发优先级较低的错误处理,也就
10、是说 ErrorPage属性 等错误处理机制仍然会发挥作用,这样有可能出现无法 控制的局面。 总结 实现页面跟踪功能在页面中如何设置 实现页面跟踪功能在配置文件中如何设置 实现自定义跟踪功能 四种页面级错误处理的实现 四种页面级错误处理的优先级 练习 1.以下对于配置文件中 节点说明错误的是 () A. Enabled 设置整个网站是否启用跟踪 B. PageOutput 是否输出跟踪信息 C. TraceMode 跟踪方式 D. LocalOnly 是否在本地显示跟踪 练习 2.节点 RequestLimit属性的作用是 () A. 能够看到跟踪信息的用户数量 B. 请求超时时间 C. 是否可以看到跟踪 D. 跟踪请求的用户类型 练习 3在网页中未使用 Try/Catch 块捕捉错误 将触发 哪个事件() A. WebError事件 B. SystemException 事件 C. Exception事件 D. Error 事件 练习 4. Page.ErrorPage属性的作用是() A.当页面出错时是否跳转页面 B.确定页面发生错误的时候会重定向至哪个页面 C.错误页面的名字 D.错误页面的个数