2011-09-01 49 views
0

Folk,在ASP.Net应用程序中实现通用错误处理的简单方法

我有一个应用程序,主要是一个页面,有很多用户控件和自定义控件。正在使用ASP.Net WebParts。网页和主页面几乎没有代码:它们都在各种组件中。

设计要求包括错误信息显示面板。客户希望应用程序在错误消息显示中显示应用程序任何部分发生的任何错误,而不是转到自定义错误页面。 (这是一个最近的决定:当我们开始时,我们正在考虑自定义错误页面。)

据我所知,WebParts不提供任何默认错误处理(不捕获错误和显示消息)和用户发生内部错误时,控件不一定会触发OnError事件。

因此,我正在寻找将所有内容都包含在Try ... catch块中,至少在演示级别,并进行处理。所以我的问题是:是否有任何简单的方法来实现一种全局或至少是全班级的错误处理程序,它将以我选择的方式处理错误,中断正在执行的例程,但返回(处理后)给失败的方法的调用者?

我愿意修改代码来验证子例程是否做了他们应该做的并返回适当的值(例如:非空数据对象)。我不想要的是整个过程被终止到顶部,跳过渲染,或(当然)着名的黄白屏幕。

我想这是一个面向方面编程的例子,但我不认为ASP.Net提供了类似的东西呢。我没有得到EntLib 5.0所做的印象。

我会崇拜它,如果有可能装饰一个属性,意思是“在错误调用这样一个等这样静静的方法,这样一个类”的方法。但我怀疑它是如此。

欢迎任何建议。

感谢,

安L.

+0

我有完全相同的问题来解决。你有没有找到它的解决方案?谢谢 – CH81

+0

@Chamila我没有找到解决方案。但是,我认为现代ASP.NET - 特别是MVC--提供的选择比2011年更多。不幸的是,我还没有对它进行足够的调查来提出建议,所以我所能做的就是建议您查看最近的ASP.NET的补充。祝你好运! –

回答

3

对于初学者来说,这是不好的做法,把周围尝试在应用程序中的每一段代码catch处理。每次你设置的时候都会有轻微的性能下降,这可能会让速度变慢。

在您的Global.asax.cs(或.vb)文件中,有一个名为Application_Error的方法,它是全局错误处理程序。这将捕获您以前未在应用程序中捕获(或抛出)的任何错误。

你可以很容易地把你的错误处理代码放在这里。它可以像将错误消息转储到日志以供将来审查一样简单,或者检查异常类型(SQL与文件与HTTP)并执行与该类型相关的错误处理任务。

+0

非常感谢。然而,我的担忧并不是记录错误,而是在正确的阶段捕捉它们,以便它们可以显示在屏幕上,而不会中断屏幕其他部分的生成或渲染。例如,新闻提要WebPart可能有问题,但Daily Inventory报告WebPart可以做得很好。我希望新闻Feed能够向用户报告在允许显示Inventory WebPart时出现错误。我的希望是,我可以做到这一点没有战略性的尝试......捕捉整个表现层的处理程序,但也许不是 –

+0

@安尼L.嗯,好点。我不知道是否嵌套的用户控件(称之为control_box或其他)解决方案将工作。您可以有一个用户控件加载页面所需的所有用户控件。如果它们中的任何一个出现错误,它们会被control_box捕获,然后将错误消息传送到适当的控制台。你甚至可以在那里工作一些AJAX类型的东西来帮助一些与页面有关的动态活动。 –

3

你需要看看elmah。如果谷歌“ELMAH”他有一个错误模块/处理程序做几乎你在找什么(尽管这将需要一些额外的调整。)

你可能要考虑让你的错误“冒泡”虽然..有一些严重的性能问题,写一堆Try..Catch..Finally块...

+0

+1 Elmah岩石。 – NotMe

+0

Elmah是事实上的解决方案。不幸的是,它只有大约60%够好,只有真正的替代品。 –

+0

我总是发现log4net对Elmah是一个很好的赞美。获取通过Elmah完成的基本错误处理,如果您确实需要做某些特殊或不同的事情,那么可以使用log4net处理程序... –

相关问题