ASP.NET MVC中基于AOP的异常处理的实现 |
作者 :彭设强 郭孜 鲁徐 | | 更新时间:2012-11-1 |
|
|
职称论文发表 | 职称论文发表 专业提供:发表论文、论文发表、毕业论文、职称论... | |
住在汉口网 | 住在汉口网是一个专业提供汉口房产信息、车辆服务、生活服务、招... | |
职称论文网 | 职称论文网提供:发表论文、论文发表、毕业论文、职称论等服务。 | |
|
(1通信指挥学院军事高技术教研室 湖北 武汉 430010 2福建省军区教导大队 福建 福州 350000 3军事经济学院襄樊分院电教中心 湖北 襄樊 441000)
摘 要:通过对AOP技术的研究,结合军队软件开发的特点,设计并实现了ASP.NET MVC开发框架的异常处理组件,为.NET软件开发人员提供了一种基于MVC的高效的组件调用方式。
关键词:开发框架;AOP;ASP.NET MVC;组件调用
随着军队信息化建设的不断发展,如何高效、规范地开发软件以满足日益增长的军事需要,成为我军软件开发人员的一个重要课题。应用开发框架是解决此类问题的一种有效方法。
作为一种新兴的软件开发技术,面向方面编程(Aspect-Oriented Programming,AOP)从系统业务逻辑中分离出次要的或辅助性功能,并将之模块化。通过在ASP.NET MVC开发框架中对此类功能的模块化设计和管理,开发人员只需专注于系统的核心业务逻辑,从而大大提供了组件的开发效率和可维护性。
1 基于AOP技术的异常处理组件的设计
1.1 Filter过滤器简介
在实际应用系统中,除了系统的核心功能模块外,往往包括例如访问控制、日志记录、权限管理和异常处理等需分散在系统各个核心业务逻辑中的服务。在OOP设计中,它导致了大量代码的重复,不利于模块的复用。AOP采用一种称为“横切”的技术,剖开封装的对象内部,将那些影响了多个类的公共行为封闭到一个可重用模块,即“方面”。
Filter是一种声明式编程方法,它能在AOP模式下完成用户所需的多种功能。由于其横切于Action之上,因此当Action被执行时,Filter将被调用。在ASP.NET MVC框架中可直接作用于Action全过程中,较其他依赖注入方法更为简便。
1.2 异常处理组件的流程设计
在程序设计的过程和用户的使用过程中,异常的出现是不可避免的。在默认情形下,未经处理的异常在默认页面中会显示错误源代码,给网站带来潜在的安全隐患,因此需要制定统一的错误处理机制,便于更加安全的管理网站。异常处理组件包括三个部分:首先是对异常的捕获、记录和报告,其次是对异常类型的判断,最后是对异常的显示。异常处理的流程示意图(见图1):
2 基于AOP技术的异常处理组件的实现
2.1 自定义异常捕获机制
HandleErrorAttribute类在默认状态下会捕捉所有的异常(包括处理视图时抛出的错误)并根据异常类型显示对应的异常处理页面。HandleErrorAttribute属性及作用(见表1):
开发者可以通过对ExceptionType和View属性的设置,实现不同的异常处理。但为了提高开发效率,本框架对异常进行统一的分类处理。因此,本框架开发了一个自定义的MyHandlerErrorAttribute类用以捕获异常,该类继承了HandlerErrorAttribute类,并将异常情况通过配置文件存入数据库中。异常处理组件的相关类关系见图2。
2.2 异常处理记录的存储设计
为了降低组件与系统间的耦合度,本框架独立创建异常处理的数据表,命名为aspnet_WebEvent_Events,用于存储系统异常的各项属性。
aspnet_WebEvent_Events表的关键字段名称及作用见表2。当被检测的控制器或者方法发生异常时,要将异常信息存储到相关的数据库中,需要配置Web.config文件,并通过webRequestErrorEventMvc.Raise()方法进行调用完成存储过程。
2.3 异常类型的判断及显示设计
为了便于开发者的测试工作,本框架将不同类型异常的显示页面进行划分,利用全局应用程序类Global.asax,通过创建Application_Error()方法,针对不同的异常类型对异常处理进行了统一的路由设置。本框架利用GetHttpCode()方法捕获页面状态代码并将异常显示情况分成四类(见表3)。
Application_Error()方法主要代码如下:
……
HttpException httpException=exception as HttpException;//实例化异常
RouteData routeData=new RouteData();
routeData.Values.Add("controller", "Error");//异常处理路由设置
if (httpException != null)
{
switch(httpException.GetHttpCode())
{
//异常类型400,返回视图HttpError400
case 400:routeData.Values.Add("action","HttpError400");
break;
//异常类型403, 返回视图HttpError403
case 403: routeData.Values.Add("action","HttpError403");
break;
……
}
}
……
本框架通过Application_Error()方法和MyHandleError过滤器的配合,为开发者提供了完善的异常处理机制,开发者只需要根据自身需求创建相关异常的视图和控制器,即可实现自定义的异常处理功能。
3 基于AOP技术的异常处理组件的应用
3.1 MyHandlerError的Web.config配置
当被检测的控制器或者方法发生异常时,要将异常信息存储到相关的数据库中,需要在Web.config配置文件中设置<healthMonitoring>…</healthMonitoring>配置节,配置节代码如下:
<healthMonitoring enabled="true">
<eventMappings>
<add name="MvcError" type="WebRequestErrorEventMvc"
startEventCode="0" endEventCode="2147483647"/>
</eventMappings>
<providers>
<add connectionStringName=" MySqlConnection "
maxEventDetailsLength="1073741823" buffer="false"
name="SqlWebEventProvider"
type="System.Web.Management.SqlWebEventProvider"/>
</providers>
<rules>
<add name="Controller Error" eventName="MvcError"
provider="SqlWebEventProvider" profile="Default" custom=""/>
</rules>
</healthMonitoring>
其中<eventMappings>…</eventMappings>节点间设置的内容为需要捕获的异常类型,<providers>…</ providers>节点间设置的内容为存储异常的方式,<rules>…</rules>节点间设置的内容为被监测的规则。
3.2 Error视图的创建
当异常出现被数据库记录后,页面将根据异常类型返回视图告知用户。根据ASP.NET MVC开发框架为异常情况的显示在Global.asax的Application_Error()中创建的四种情况,本系统创建了ErrorController及HttpError400、HttpError403、HttpError404、General四个方法。HttpError400方法的实现代码:
public ActionResult HttpError400(string error)
{
ViewData["Title"] = "对不起,出现异常!(400)";
ViewData["Description"] = error;
return View("Index");
}
其它三种方法与HttpError400工作原理基本相同。在创建控制器的同时,本系统在Views\Error文件夹中对应的创建了Index.aspx和Error.htm页面。
有时候在Error视图中也会发生错误,这时错误代码仍会呈现在浏览器中,为了避免这种情况的出现,本框架在Web.config文件的customErrors节中自定义错误页面: <error?statusCode="500"?redirect="/Error.htm"?/>,Error.htm将提示用户Error视图出错。
4 结语
通过对AOP技术的研究,为ASP.NET MVC开发者提供了一种高效的组件调用方式,对军队软件开发人员的工作具有一定的意义。
参考文献
1 刘中兵.开发者突击:精通AOP整合应用开发[M].北京:电子工业出版社,2008
2 龚赤兵.Web开发新体验:ASP.NET 3.5 MVC架构与实战[M].北京:电子工业大学出版社,2009 职称论文发表网http://www.issncn.com
职称论文发表网http://www.issncn.com
|
|
|
|