文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
 websphere   .net framework
您现在的位置: IT文谷 >> 开发平台 >> .net framework >> C# >> 文章正文
用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告
用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告
用C# .NET创建自定义错误报告

用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告
    本文介绍如何在 ASP.NET 中发生错误时使用 Visual C# .NET 代码捕获和响应错误。ASP.NET 改进了传统的 Microsoft Active Server Page (ASP) 中的错误处理选项。在 ASP.NET 中,您可在应用程序中处理若干不同级别的错误。

 

ASP.NET 中的新功能

ASP.NET 在处理和响应错误的方式上进行了若干改进。在传统的 ASP 中,是用"On Error Resume Next"(或在 Jscript 中用 try-catch 块)处理错误的。或者,如果您运行的是 Microsoft Internet Information Services (IIS) 5.0,则使用 ASPError 对象创建自定义的错误报告页。然而,这些方法都有其局限性。

ASP.NET 提供了在运行 ASP.NET 应用程序时可能出现的错误的若干处理和响应级别。ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:page_error 事件、application_error 事件以及应用程序配置文件 (Web.config)。

本文演示如何在 ASP.NET 应用程序中使用这些新功能。尽管本文由于与 ASP.NET 直接相关而介绍了如何提供自定义错误页和一般错误报告,但是它并不介绍其他错误处理方法,如 try-catch-finally 块和公共语言运行库 (CLR) 异常系统。

 

如何使用 Page_Error 事件

page_error 事件提供一种捕获在页级别出现的错误的方法。您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。

备注:此示例在浏览器中显示详细的错误信息,提供此示例只是为了进行说明。向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心。更适当的做法是向用户显示一条消息,告知已发生错误,然后将具体的错误详细信息记录在事件日志中。

本示例引发一个强迫错误发生在 Page_Load 事件中的空异常。按照以下步骤可创建将测试 Page_Error 事件的初始页。
按照以下步骤将名为 PageEvent.aspx 的新文件添加到项目中:
打开 Microsoft Visual Studio .NET。
在"解决方案资源管理器"中,右键单击该项目节点,指向添加,然后单
击添加 Web 窗体。
在名称文本框中,键入 PageEvent.aspx,然后单击打开。
将以下代码添加到 PageEvent.aspx 中:
从文件菜单中,单击保存 PageEvent.aspx。
右键单击该页,然后单击在浏览器中查看以运行该页。请注意,将按照代码规范引发和报告错误。
备注:您可能注意到代码发出对 Server.ClearError 的调用。这将防止错误继续到要被处理的 Application_Error 事件中。

此外,您还应记下 @ Page 指令中的 inherits 属性。 如果已经设置 inherits,则必须首先生成项目,然后再浏览到该页。 如果不首先生成项目,将看到下面的错误信息: 'Project.PageEvent' is not a valid type  

如何使用 Application_Error 事件

与 Page_Error 事件相类似,您可使用 Application_Error 事件捕获发生在应用程序中的错误。由于事件发生在整个应用程序范围内,因此您可记录应用程序的错误信息或处理其他可能发生的应用程序级别的错误。

下面的示例基于前面的 Page_Error 事件代码示例,如果 Page_Load 事件中的错误未在 Page_Error 事件中捕获,将引发异常。application_error 事件在应用程序的 Global.asax 文件中进行指定。为简单起见,本节中的步骤创建一个要在其中引发异常的新页,捕获 Global.asax 文件的 Application_Error 事件中的错误,并将该错误写入事件日志中。下面的步骤演示如何使用 Application_Error 事件:
将名为 AppEvent.aspx 的新文件添加到项目中:
将以下代码添加到 AppEvent.aspx 中:
从文件菜单中,单击保存 AppEvent.aspx。
将 Application_Error 事件添加到 Global.asax 文件中以捕获在 AppEvent.aspx 页的 Page_Load 事件中引发的错误。注意,您必须为 System.Diagnostics 名称空间将另一条 using 语句添加到 Global.asax,才能使用事件日志。

将以下代码添加到 Global.asax 文件中:
using System.Diagnostics;



protected void Application_Error(object sender, EventArgs e)

{

Exception objErr = Server.GetLastError().GetBaseException();

string err ="Error Caught in Application_Error event\n" +

"Error in:" + Request.Url.ToString() +

"\nError Message:"+ objErr.Message.ToString() +

"\nStack Trace:"+ objErr.StackTrace.ToString();

EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);

Server.ClearError();

//additional actions...

} 
保存 Global.asax 文件。
在 Visual Studio .NET 中,在生成菜单上,单击生成。
右键单击该页,然后单击在浏览器中查看。在这种情况下该页将为空白,但是您应该注意到在事件日志中已添加了一个新项。本示例在应用程序日志中生成一个项,可从事件查看器访问应用程序日志。在记录错误之后,您可能希望将用户重定向到另一个更用户友好的错误页或者根据需要执行一些其他操作。
 

如何使用 Web.config 文件

如果您不调用 Server.ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误,则将根据 Web.config 文件的 部分中的设置处理错误。在 部分,可将重定向页指定为默认的错误页 (defaultredirect) 或者根据引发的 HTTP 错误代码指定特定页。您可使用此方法自定义用户收到的错误信息。

如果发生在应用程序以前的任一级别都未捕获到的错误,则显示这个自定义页。本节演示如何修改 Global.asax 文件,以便从不调用 Server.ClearError。因此,错误在作为捕获错误的最后一点的 Web.config 文件中进行处理。
从上一个示例中打开 Global.asax 文件。
将 Server.ClearError 行注释掉,以便确保错误出现在 Web.config 文件中。
将所作更改保存到 Global.asax 中。代码看起来应类似如下形式:
using System.Diagnostics;



protected void Application_Error(object sender, EventArgs e)

{

Exception objErr = Server.GetLastError().GetBaseException();

string err ="Error Caught in Application_Error event\n" +

"Error in:" + Request.Url.ToString() +

"\nError Message:"+ objErr.Message.ToString() +

"\nStack Trace:"+ objErr.StackTrace.ToString();

EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);

//Server.ClearError();

//additional actions...

} 
将以下代码添加到 部分,以便将用户重定向到自定义页:


备注:必须修改 defaultRedirect 属性中的文件路径,以便它

引用相关的 Web 服务器和应用程序名称。

因为在此级别捕获的错误会发送到默认的错误页,所以,

必须创建一个名为 ErrorStatus.htm 的错误页。请记住,您要使

用此方法来控制向用户呈现的内容,因此本示例使用 .htm

页作为错误页。将以下代码添加到 ErrorStatus.htm 中:



custom Error page!


You have been redirected here from the <customErrors>
section of the

Web.config file.



若要测试该代码,请保存这些文件,生成项目,然后在浏览器中查看 AppEvent.aspx。请注意,在引发错误时,您将被重定向到 ErrorStatus.htm 页。
尽管您可在 部分中 defaultRedirect 属性的值中引用默认的错误页,但是您还可根据引发的 HTTP 错误代码指定要重定向到的特定页。 子元素允许使用此选项。例如:




备注:在 部分的 defaultRedirect 中指定的页是一个 .htm 文件。如果您打算在 .aspx 页中使用 GetLastError (正如 Page_Error 和 Application_Error 示例那样),则在进行重定向之前,必须将异常存储在会话变量或某个其他方法中。

请注意, 部分包括设置为 On 的 mode 属性。mode 属性用于控制错误重定向发生的方式。例如,如果您正开发应用程序,则很可能希望查看实际的 ASP.NET 错误信息,并且不希望被重定向到更用户友好的错误页。mode 属性包括以下设置:
on:未被处理的异常将用户重定向到指定的 defaultRedirect 页。此模式主要用于生产。
off:用户收到异常信息而不是被重定向到 defaultRedirect 页。此模式主要用于开发。
remoteonly:只有在本地计算机上访问该站点的用户(通过使用 localhost)才能收到异常信息。所有其他用户都被重定向到 defaultRedirect 页。此模式主要用于调试。
疑难解答 在 Windows 2000 和 Windows XP 上的默认安装中,ASP.NET 在辅助进程中运行 Web 应用程序代码。此进程的标识默认为名为 ASPNET 的无特权本地帐户。在 ASP.NET 的 beta 版中,该进程的标识是 System,这是一个功能强大的管理员帐户,拥有许多计算机特权。

用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告


  • 上一篇文章:

  • 下一篇文章:
  • 进入论坛讨论

    相关文章
    基于.NET的多线程编程入门
    Microsoft .NET 框架资源基础
    VS2005常用插件搜罗
    .net中用GDI+提高gif图片保存画质
    VS.NET:通过Web服务瞄准电子商务
    对象设计中创建VS使用
    安装/初始化/个性化DotNetNuke
    介绍dotnet原动力(DNN)
    GDI+编程10个基本技巧
    DTE .NET工程的自动化编译
    .Net中如何操作IIS的原理分析
    VS.NETRC5无法创建Add-IN工程
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 在本网BBS上发表言论者,文责自负。
    ③ 如您因版权等问题需要与本网联络,请在30日内联系 。
    用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告
    用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告2006-7-15用C# .NET创建自定义错误报告

    .net framework专题
    人气排行
  • 此栏目下没有文章
  • 最近更新
    普通文章技术介绍 新数据网格简介
    普通文章.NET 开发人员该下载的十个必备
    普通文章深入剖析Asp.net资源文件
    普通文章通过事例学习.net的WebForms技
    普通文章ASP.NET Tips1---合并多个字段
    普通文章微软明年1月份出台.NET专业开发
    普通文章微软下月底前完成Vista大部分功
    普通文章揭开微软 .NET 认证考试的面纱
    普通文章Visual Studio:Microsoft开发工
    普通文章Visual Studio:Microsoft开发工
    全站热点       
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷社区
    Tel: 0577-65690019    E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2006 wengu.org 文谷 All Rights Reserved
    浙ICP备05000327号