日期:2014-05-18  浏览次数:20443 次

三层结构中的错误处理,有点迷惑。大虾指点
三层结构看了些

但里面的错误处理很少,所以对这方面比较想了解一下。

最好能深入些

比如:如果不是致命的错误,则提示详细的错误信息

            如果是可以忽略的错误,则继续执行。

            如果涉及到数据安全的,则终止执行。

呵呵~~顶着有分

------解决方案--------------------
try


catch



------解决方案--------------------
我顶。
------解决方案--------------------
try
{}
catch
{

}
中进行处理
一般严谨的程序,都是先判断输入的准确性,然后进行处理
如果不是常见的错误,在catch中,我们一般都是直接catch{throw;}直接丢给ASP.NET的错误页面

------解决方案--------------------
一般的应用都会采用自定义Exception来处理,系统中的异常。但是在DB访问层和业务逻辑层只是将异常转化为自定义的异常比如将SQLException转化为AppDBException(该异常为自定义异常)最后的Exception处理(比如显示错误画面,打印日志等)都在表现层处理。
------解决方案--------------------
你可以自己写一个错误类
------解决方案--------------------
底层捕获异常,处理后再抛异常,可以先包装原始异常再抛,UI 层捕获
------解决方案--------------------
可以自己写继承于Exception的异常类来处理
------解决方案--------------------

引言:
在Data层(不算作三层中的一层)
:定义一个错误消息管理的类(有错误消息,错误级别(警告,错误)等等),如ErrMsg.

附:
因为Data层贯穿三层,所以在三层中都可以操作ErrMsg.

具体操作如下:
一个功能开始,定义一ErrMsg对象,当作参数传给功能方法,如果功能方法中捕捉到异常或其它逻辑错误都将错误消息给ErrMsg对象,并将ErrMsg返回到界面层,显示ErrMsg的错误消息.
(其中根据错误级别,来判断是否要返回到前台界面显示)


------解决方案--------------------
实现Global.ascx.cs中的
protected void Application_Error(Object sender, EventArgs e)方法.
加入自己的错误处理机制
Exception exception = ctx.Server.GetLastError ();
if(exception is XXX类型Exception )
{
...
}
------解决方案--------------------
HttpContext.Current.Server.GetLastError ();

------解决方案--------------------
对于 ASP.NET

整站可以统一再 Applicaton_Error 事件中捕获底层异常,然后实施日志、严重等级处理,对于发布版本,用户最后看到的是不暴露内部实现信息的自定义错误信息

同时还有一个页级错误事件 System.Web.UI.Page.Error 可以捕获单页异常
------解决方案--------------------
所有的页面类继承与自己定义的页面基类, 然后在此页面基类中的Error事件中处理所有页面异常

如果是业务层或者数据访问层直接抛出自定义异常进行处理
------解决方案--------------------
up
------解决方案--------------------
try
{}
catch()
{}
finall
{}
在加上一个错误页面.
ok!
------解决方案--------------------
try
{}
catch()
{}
finall
{}
在加上一个错误页面.
ok!

------解决方案--------------------

try
{

}
catch(Exception e)
{
//如果方法1有错误
if(e.TargetSite.Name.ToUpper() == "方法1 ")
{}
//如果方法2有错误
if(e.TargetSite.Name.ToUpper() == "方法2 ")
{}
//如果方法3有错误
if(e.TargetSite.Name.ToUpper() == "方法3 ")
{}

}
finall
{

}
------解决方案--------------------
“数据层不进行任何异常处理,而且数据层应该完全的信任业务层的数据”