项目开发经验-ASP.NET项目开发中的异常处理

前言:异常的处理在项目开发中是很有必要的,异常的处理不仅仅只是try..catch..finally就完事了的。异常处理绝对可以称开发中的重要组成部分。必须正确的面对异常,因为即使是最能干的开发人员,也要面对这个问题 ....

我们不知道客户是怎么样使用我们开发的软件的,所以我们必须处理这样的情况:如果系统不按照我们的设计时所想的运行,我们改怎么办?

下面我们就来具体的介绍在ASP.NET项目开发中的异常的处理方式,希望看完后,大家可以回答上面的问题。

本篇的话题如下:

应用程序级别异常处理的错误处理

页面级别异常处理

方法级别异常处理

web.config文件异常处理配置

健康监视(Health Monitoring)

Enterprise Application Blocks异常处理模块

一.在应用程序级别的异常处理:

相信大家对Application对象不陌生,而且在项目中添加过Global.asax文件。确实,ASP.NET在应用程序级别处理异常的代码都是放在Global.asax的Application_Error事件处理下的:

void Application_Error(object sender, EventArgs e)
  {
  // Code that runs when an unhandled error occurs
  }

我们可以在上面的事件处理的方法中捕获所有的异常,而且还可以把异常记录到日志文件,并且同时发送Email告诉开发人员出现了什么问题,如下

Exception error = Server.GetLastError().GetBaseException();
//在事件日志中记录异常
if (!EventLog.SourceExists("ApplicationException"))
{
  EventLog.CreateEventSource("ApplicationException", "Application");
}

EventLog eventLog = new EventLog();
eventLog.Log = "Application";
eventLog.Source = "ApplicationException";
eventLog.WriteEntry(error.ToString(), EventLogEntryType.Error);

//发送Email给开发人员
MailMessage email = new MailMessage("administrator@xiaoyang.com",
"vince.varallo@PoweredByV2.com");
email.Body = error.ToString();
email.Subject = "An error occurred in the  Application";
SmtpClient smtpClient = new SmtpClient("127.0.0.1", 25);
smtpClient.Send(email);
Response.Redirect("ErrorPage.aspx");

当然,上面的代码要正确的运行,我们海必须在Global.asax中加入相应的命名空间,而且在发送邮件的时候,上面的"127.0.0.1"要换为我们自己的邮件服务器的地址:

<%@ Import Namespace="System.Diagnostics" %>
  <%@ Import Namespace="System.Net.Mail" %>

还有一点要注意的就是,ASP.NET运行时是以ASPNET账户运行的,这个账户的权限是有限的,如果我们想要使得上面的代码可以运行,那么就必须要给ASPNET账户访问注册表的权限。如果你不给权限,那么上面的代码就报错。

我们赋予ASPNET账户访问在"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog"节点以及字节点的权限。

时间: 2024-12-30 23:29:35

项目开发经验-ASP.NET项目开发中的异常处理的相关文章

【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理

原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内容. Exception Handling in ASP.NET Web API ASP.NET Web API中的异常处理 本文引自:http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling

asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)_实用技巧

在Web开发中,有很多可以上传的组件模块,利用HTML的File控件的上传也是一种办法,不过这种方式,需要处理的细节比较多,而且只能支持单文件的操作.在目前Web开发中用的比较多的,可能uploadify(参考http://www.uploadify.com/)也算一个吧,不过这个版本一直在变化,他们的脚本调用也有很大的不同,甚至调用及参数都一直在变化,很早的时候,那个Flash的按钮文字还没法变化,本篇随笔主要根据项目实际,介绍一下3.1版本的uploadify的控件使用,这版本目前还是最新的

asp.net web开发中实现对office文档(word、excel)进行网页内编辑

问题描述 asp.netweb开发中实现对office文档(word.excel)进行网页内编辑,希望能给出具体实例源码,不甚感谢! 解决方案 解决方案二:顶一下解决方案三:用控件www.ntko.com*****************************************************************************欢迎使用CSDN论坛专用阅读器:CSDNReader(附全部源代码)http://www.cnblogs.com/feiyun0112/arc

[c#]asp.ent下开发中Tag的开发技巧_实用技巧

网站开发常用关键字(tag),一般需要获得最多的被采用的Tag,也就是流行词. 通常思路是将关键字tag保存到单独表中,然后在其他表中根据一组id进行对多个关键字进行标识.因为一个文章可以选择多个tag,查询的时候颇为麻烦. 所以我在开发中利用了这样的方法,当然不见得多高明 :),分享下经验. 将tag直接保存在文章的表中,如Tag字段,tag为"c#"和".net",则Tag字段值为"c#/.net"就是依/符号分割tag,这样数据库中保存的是

ASP.Net之C#中的异常处理

基础知识 程序开发中,数据流按照一定的规律进行传输,如果用户和程序之间的交互完全按照预定的效果运行,程序不会出现问题.可以假设所处理的数据都符合要求,通过界面作格式判定,所有资源都正确,但是为了系统的安全,需要处理存在的隐患,不能对数据安全抱有理想化的想法. 在ASP.NET中,错误处理分为两个层面:页面输入信息验证.CLR提供的结构化错误处理机制. 在页面输入信息判断中,可以采用JavaScript.VBScript等脚本进行判断,也可以使用.NET 环境下带有的Validation和正则表达

如何提高ASP.NET软件开发中的程序性能

我将不限于只讨论asp.net应用程序的内容,因为它们只是web应用程序的一个子集.本文也不能提供一个完整提高web应用程序性能的指南,因为这需要一本书的篇幅.本文只提供一个提高web应用程序性能的良好的开端.(剩下的只有我们自己慢慢研究了). 在工作这外,我经常去攀岩,在每次攀岩之前,我都会重温一下攀岩线路图及看一下前面的成功的攀岩者的建议.因为我们需要它们的成功经验.同样的,当你需要修改某个有性能问题的程序或者是要开发一个高性能的站点时,你也需要学习怎么样写一个高性能的web应用程序. 我个

ASP.NET 网站开发中常用到的广告效果代码_实用技巧

用本贴持续记录一些收集的广告效果.希望给有需求的朋友们一些支持.也希望朋友们把我未记录的广告形式也给予一起回贴.使本贴更加的完善,也让更多的朋友们分享. 1.翻屏效果 翻屏效果 复制代码 代码如下: <html> <head></head> <body> <div style="HEIGHT:85px"> <script LANGUAGE='JavaScript'> document.ns = navigator.

Asp及Web开发中的常见问题

表格的折行处理. <table style="TABLE-LAYOUT: fixed" width="200" border="0" cellspacing="0" cellpadding="7" bgcolor="#f7f7f7"> <tr> <td style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-

ASP动态网页开发中的WEB打印代码大全

web|web打印|动态|网页 这篇文章主要介绍了如何使用ASP控制Web的各种打印效果,它能够控制纵打.横打和页面边距等. 1.控制"纵打"."横打"和"页面的边距". (1) <scriptdefer> functionSetPrintSettings(){ //--advancedfeatures factory.printing.SetMarginMeasure(2)//measuremarginsininches facto