了解ASP .NET(WebForms)中的错误处理

约翰·杜

我有一个构建为的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文件中:

    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);
                    }
                }
    
            }
    

    但是,大多数情况下不会被调用。我只是看到错误,在屏幕上显示一条错误消息(就像光荣的警报一样)。
    或者,如果调用此方法,则exc不是HttpUnhandledException,因此传输永远不会发生。

    我也在web.config中尝试了此操作,但是我看不到它有任何作用。(如果我注释掉,我得到的结果相同)

    <customErrors mode="On" defaultRedirect="Error.aspx?handler=customErrors%20section%20-%20Web.config">
      <error statusCode="404" redirect="ErrorPage.aspx?msg=404&amp;handler=customErrors%20section%20-%20Web.config"/>
    </customErrors>
    

    最终目标是将用户重定向到页面(或者可能只是很好地显示错误),同时将其登录到文件中或将错误写到数据库中。

  • 昂德里·史维达

    void Application_Error(object sender, EventArgs e)将调用在主线程中发生,当服务器处理页面(要求为.aspx,.ashx的资源)例外。

    在以下两种情况下不会调用它:

    • 您在处理.aspx资源时触发了新线程,并且该新线程中将发生异常
    • 在Web服务方法,WCF方法等中(即非.aspx资源)
    • 异常是“坏屁股”异常-一种破坏应用程序域的异常-StackOverflowExceptionOutOfMemoryException

    因此,对于WCF,WebServices,将所有入口点包装在

    try {} 
    catch(Exception e) {
      Logger.Log(e);
      throw;
    } 
    

    声明(请注意,如果有很多,请花时间在更通用的解决方案上)。

    另请注意-如果您的错误页面上有错误,您将看到黄色的死亡屏幕(显然)。因此,我更喜欢将静态html页面显示为错误页面(发生问题的可能性最低)。

    在您的错误处理代码你不清理错误状态,我也宁愿RedirectServer.Transfer错误处理。最终的片段看起来像:

     var ex = Server.GetLastError();
     Logger.Log(ex);
     Server.ClearError();
     Response.Redirect("/error.aspx");
    

    最后说明-无需自己进行错误日志记录(优秀的程序员很懒惰-就“不要重新发明轮子”而言)-有很多很棒的日志记录模块,例如Elmah,Microsoft Enterprise Library或log4net。

    本文收集自互联网,转载请注明来源。

    如有侵权,请联系[email protected] 删除。

    编辑于
    0

    我来说两句

    0条评论
    登录后参与评论

    相关文章

    来自分类Dev

    ASP .Net MVC中的错误处理

    来自分类Dev

    ASP.NET中的全局错误处理

    来自分类Dev

    ASP.NET中的全局错误处理

    来自分类Dev

    ASP.Net全局错误处理和错误站点?

    来自分类Dev

    ASP.Net中的AJAX Web服务-如何进行全局错误处理?

    来自分类Dev

    与ASP.net 5 MVC 6中的错误处理相混淆

    来自分类Dev

    ASP.NET Core 3.1中的自定义错误处理中间件?

    来自分类Dev

    ASP.NET MVC Core和Dapper中的全局异常/错误处理

    来自分类Dev

    了解ASP.net跟踪

    来自分类Dev

    ASP.NET MVC 5错误处理

    来自分类Dev

    了解ASP.NET Webforms,OWIN和ASP.NET Identity的Autofac中间件用法

    来自分类Dev

    在asp.net Webform中使用文本框对radiobutoon进行错误处理

    来自分类Dev

    ASP.NET MVC自定义错误处理Application_Error Global.asax?

    来自分类Dev

    带有协议缓冲区的ASP.NET WebApi-错误处理

    来自分类Dev

    C#asp.net MVC使用JSON进行自定义错误处理

    来自分类Dev

    在asp.net Webform中使用文本框对radiobutoon进行错误处理

    来自分类Dev

    无扩展名的 404 页的 ASP.NET 错误处理

    来自分类Dev

    了解asp.net中的负载平衡

    来自分类Dev

    了解asp.net中的负载平衡

    来自分类Dev

    了解Asp.Net身份界面设计策略

    来自分类Dev

    了解Asp.Net身份验证要点

    来自分类Dev

    需要了解简短的ASP.NET源代码

    来自分类Dev

    通过ASP.net核心托管模型了解Blazor组装

    来自分类Dev

    在Asp.net中了解Bootstrap和jquery

    来自分类Dev

    了解asp.net身份登录过程吗?

    来自分类Dev

    从WebForms 4.0 Asp.Net中的Page.GetRouteURL()返回错误的链接

    来自分类Dev

    如何使 elmah.io 与 ASP.NET Core 和错误处理中间件配合良好?

    来自分类Dev

    与asp.net一起使用时找不到Jqgrid内联错误处理程序文件

    来自分类Dev

    ASP.NET WebForms中的异步事件

    Related 相关文章

    热门标签

    归档