为你的网站定制一套统一的异常处理机制

写过程序的人都知道,再好的程序都可能存在未能处理的异常情况,因为程序运行的环境和人员的操作方式可以说是千差万别,开发人员在一开始很难把所有的情况都想到,并做相应的处理。所以,开发人员才需要配合测试人员进行协同工作,目的就是尽量较少和消灭(完全消灭当然只是理想情况了)程序中的错误,处理尽可能多的异常情况。在各种应用程序中,网站面临的挑战可以说是各类程序中比较大的了。为什么这么说呢?原因很简单,一个网站的用户千差万别,用户习惯各不相同,用户所使用的电脑和软件平台也各异,网络环境更是大相径庭,所以网站发生异常情况的几率也是比较大的。既然异常不可避免,但我们应该为我们的网站制定一套异常处理机制,即如何更合理的为已经发生的异常善后。本文的讨论仅限于.NET环境的网站开发中的异常处理,其他平台的道理应该是一样的,只是具体的实现方式不同而已。

其实大部分异常无非分为两大类,第一类是你知道可能会发生的,即开发人员在写程序的时候就已经知道可能会发生的一些意外情况。这种情况的异常又可以分为如下几种情况:其一,异常的发生不会影响程序的正常执行,只需要把这个异常正确捕获到,并做相应的处理即可;其二,异常一旦发生,程序无法完成正常的处理逻辑,这个时候需要跳转异常处理逻辑上来,提示或者通知管理员或者最终用户目前发生的情况。以便管理员或者用户做相应的处理以后才能正常执行程序逻辑。举个例子,用户想查询数据库中的某条数据记录,当程序试图连接目标数据库的时候发现数据库服务器Down机了,正常的查询操作已经没有办法继续。这就要求程序在处理像连接数据库这样的操作的时候,先要判断数据库是否运行正常,一旦捕获到数据库运行异常,应该立即记录错误日志并报告数据库管理员,同时给予用户友好的提示;其三,有的异常是正常处理逻辑的需要。比如.NET中Thread.Abort()就会引发一个ThreadAbortException,调用Response.End(), Response.Redirect(), Response.Transfer()的时候也会引发一个ThreadAbortException,这些都是用于控制正常逻辑的。这类异常一般不需要你做太多额外的处理。值得注意的是:我们在写自己的程序的时候,尽量不要把异常当成正常处理逻辑的一部分,这样会导致程序执行效率低下。举个例子:

int temp = 0;

try
{
temp = Int32.Parse(input);
}
catch
{
temp = 1;  // 1是默认值
}

上面这段代码就把异常处理当成了正常处理逻辑的一部分,这样会使得程序执行效率低下。上面这段代码写成如下形式会好些:

int temp = 0;

if(Int32.TryParse(input, out temp) == false)
{
temp = 1; // 1是默认值
}

现在接着上面的说,除去第一类异常外,还有一种异常即第二类异常是程序开发人员在一开始没有想到的一些异常情况,已经超出了程序编写人员的处理范围。这类异常是很致命的,一旦发生,对系统将造成很大影响。因为到了这个时候,程序已经的运行已经不在我们的控制范围内了。

对于第一类异常,程序员基本都已经将他们就地解决了。对于第二类异常,就需要为其建立一个统一的处理机制。对于一个中等规模以上的网站来说,业务逻辑是比较复杂的,涉及的网页也很多。我们事先不知道哪个页面或者哪段程序会出异常(至少在程序开发的时候没有完全想到的一些异常),所以才需要有这样一套统一的异常处理机制。这里讨论两种可行的办法,第一种办法是为网站所有的页面创建一个基类,基类继承自System.Web.UI.Page,在基类里面统一处理各类异常情况。实现方式是为基类添加一个异常处理事件,即this.Error += new System.EventHandler(this.PageBase_Error); 把你的异常处理逻辑实现在方法PageBase_Error中。

protected void PageBase_Error(object sender, System.EventArgs e)
{

             Exception currentError = Server.GetLastError();

             if (currentError == null)
             {
                 return;
             }

             LogError(currentError);  // 把错误信息写到你的日志列表里面,也可以同时给系统管理员发送一封邮件。

             string friendlyMsg = "你的友好错误提示";

#if DEBUG  // 如果程序处于Debug状态,则直接在页面显示具体错误信息,便于调试

             friendlyMsg = currentError.Message + “<br />Stack: ” + currentError. StackTrace;

#endif

             // 下面的信息是显示给用户的友好提示信息

             Response.Write(friendlyMsg);  // 你也可以重定向到某个错误提示页面。这里要小心一点的是,确保你的错误提示页面绝对不要有个Bug,否则可能会形成死循环。所以,错误提示页面最好就是一张完全静态的HTML页面。

             Server.ClearError();

}

时间: 2024-10-21 17:13:44

为你的网站定制一套统一的异常处理机制的相关文章

win 网络编程-win32下有没有既能监听标准输入又能监听套接字的机制呢?

问题描述 win32下有没有既能监听标准输入又能监听套接字的机制呢? 在下win上菜到不能鸟的菜鸟一枚,求教各位大虾如何能够在win既监听标准输入又监听网络套接字呢?类似unix下的select,不过我知道win上也有个缩水版的,只能监听套接字,而不能监听文件句柄,所以想各位求助.

Jersey框架的统一异常处理机制分析_java

一.背景 写这边文章源于有朋友问过java中的checked exception和unchecked exception有啥区别,当时我对其的回答是:我编程时仅用RuntimeException.其实,我说句话我是有前提的,确切的应该这么说:在成熟的开发框架下编写业务代码,我只使用或关注RuntimeException.因为,由于框架往往将异常的处理统一封装,这样以便程序员更好的关注业务代码,而业务的一些错误通常是在系统运行期间发生的,因此业务的异常通常被设计为RuntimeException的

WCF服务全局统一异常处理机制

转载:http://www.csframework.com/archive/1/arc-1-20150109-2193.htm 服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. C# Code: /// <summary> /// WCF服务端异常处理器 /// </summary> public class WCF_Excepti

网站通行证设计:账号统一处理一次验证全网通行

文章描述:通行证交互设计分析. 现在越来越多企业和公司涉及到通行证的概念,那么通行证到底应该什么样子的?什么样的通行证既简单又能满足用户需求?笔者挑出几款主流互联网产品做了一个简要的分析: 新浪网: (新浪通行证架构图) 新浪网注册通行证:笔者想要在新浪网注册个会员,但在新浪网首页页面顶部没有发现会员注册按钮.假如你非要在首页找到会员注册这几个字,那么请到页面的底部.还有一种方法是在首页输入错误的用户名和密码点击登录,可以跳转到登录界面,在登录界面你可以选择会员注册. 首先,新浪网采用邮箱作为登

企业网站定制服务是趋势 如何选择定制服务商是关键

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 越来越多的企业开始进军互联网,网站作为互联网一个重要的平台自然就会受到企业的重视,很多企业现在已经不满足在互联网找现成的模板,免费的建站程序,来搭建千站一面的普通企业网站了,纷纷开始定制网站服务,包括网站营销定制服务,因为企业主已经意识到,仅仅把网站做出来,如果不能够营销出去是没有什么用的!所以定制建设网站,定制营销方案等等网站整合运营服务就

python正则表达式修复网站文章字体不统一的解决方法_python

网站的大框架下有定义的字体,包括字体大小和颜色等,用户发布文章的时候可能是从其他网站复制过来的文本,复制的过程也保留了字体描述信息.当文章在页面上显示的时候,默认先会使用文章中定义的字体,如果文章中字体不存在的话才显示大框架下定义的全局字体.因此网站的内容就会显得很乱,有的文章字体很大,有的文章字体很小,不美观.能统一的话就好了! 我对html和css等不是很熟,不知道是否能设置一下让文章中定义的字体内容失效. 笨人有笨办法,统一修改文章,将用户的对字体的定义全部删除!哈哈!如果手工完成的话,这

个性化网站定制的分析和思考

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 自2006年以来,个性化定制网站遍地开花,他们依托在线设计互动平台,提供个性印刷品(贺卡.台历.挂历.明信片.请柬.名片等).T恤.马克杯等.本文着重分析个性化定制网站的定义,结构.营销上的一些实务做法,在此基础上和各位分享笔者的一些分析和思考. 首先说说什么是个性化定制网站,它有什么功能,可以为您做什么?要想明白这个,先来看看定制的历史.据<左传·定公十年>记载:"有礼仪之大,故称夏;有服章之美,谓之华."简单来说,

温州市首批15家文明网站揭晓 并有统一形象LOGO

为加强网络文化建设和管理工作,大兴网络文明之风,营造积极健康的网络环境,市委宣传部.市精神文明建设指导委员会办公室.市委对外宣传办公室.市互联网信息办公室.市经济和信息化委员会.市公安局.市文化广电新闻出版局等单位在全市联合组织开展"温州市第一批文明网站"评选活动.同时,活动还面向全国公开征集文明网站形象LOGO. 经过推荐.审核.网上投票.评委评审等环节,中国·温州政府门户网.温州网.温州文明网等15家网站入选温州市第一批文明网站.此次入选的网站既有新闻网站,也有政府网站,还有商业网

Web API系列(三)统一异常处理

前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供的统一webapi 接口,统一的异常处理,把正确的信息返回给调用者很重要.这样可以让接口开发人员,了解具体的原因所在,这样可以得到有效的错误处理. 需要注意的是,webapi异常的状态码,尽量不要和业务状态码混淆.可以分为两个不同的字段,或者是状态码的规则不同.相关返回数据的格式,可以参考,前面的文章. 1.