我有一个Web表单(.NET 4.0)Web应用程序,构建为:
MyApp.Portal(主门户,包括页面、WCF AJAX服务、脚本等)
MyApp.BusinessLayer(类库调用DataAccess获取数据)
MyApp.Services(类库包含WCF服务器用于服务器端代码)
MyApp.DataAccess(ADO Oracle)
我正在尝试遵循一些错误处理教程,但目前我得到的结果不一致。
我的问题是,我应该如何处理我的应用程序中的错误? 我应该在所有方法中都使用try/catch包装吗? 我只需要在业务层中的方法中使用try/catch包装吗? 如果出现WCF Ajax方法的PortalLayer中的错误,我该如何处理?
例如,我将以下内容添加到Global.asax文件中:
我的问题是,我应该如何处理我的应用程序中的错误? 我应该在所有方法中都使用try/catch包装吗? 我只需要在业务层中的方法中使用try/catch包装吗? 如果出现WCF Ajax方法的PortalLayer中的错误,我该如何处理?
例如,我将以下内容添加到Global.asax文件中:
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
Exception exc = Server.GetLastError();
if (exc is HttpUnhandledException)
{
if (exc.InnerException != null)
{
exc = new Exception(exc.InnerException.Message);
Server.Transfer(@"\Pages\Error.aspx?handler=Application_Error%20-%20Global.asax", true);
}
}
}
然而,大部分时间这个方法并没有被调用。我只能看到一个错误信息显示在屏幕上(就像一个高级的警告)。
或者如果这个方法被调用了,那么异常不是HttpUnhandledException,所以传输就永远不会发生。
我也尝试过在我的web.config中添加这个代码,但我觉得它好像没什么作用。(如果我注释掉它,我得到的结果是一样的)
<customErrors mode="On" defaultRedirect="Error.aspx?handler=customErrors%20section%20-%20Web.config">
<error statusCode="404" redirect="ErrorPage.aspx?msg=404&handler=customErrors%20section%20-%20Web.config"/>
</customErrors>
最终目标是在重定向用户到页面(或仅将错误显示得漂亮)的同时,将错误日志记录到文件中或将其写入数据库。