【发布时间】:2013-10-05 03:50:00
【问题描述】:
我对在 ASP.NET 和 WCF(IErrorHandler) 中使用全局异常处理程序(Application_Error/Page_Error)有一些基本的疑问。
如果我使用上述任何一种,每个异常都会通过它们吗?我可以根据自己的意愿记录和映射它们吗?这是否也促进了删除所有不必要的 try catch 块并在需要的地方用 try finally 替换它们?
我所说的“不必要”是指捕获最终变得多余的块。例如如果我在 wcf 中捕获所有 DB 异常并将它们转换为特定的 FaultException 并且现在我在 ProvideFault 方法中进行相同的转换,那么我现在不应该删除这些 catch 块,因为他们所做的唯一工作就是创建 FaultException 与客户端友好详情?
【问题讨论】:
-
不...只是不。 ::颤抖::
-
try catch 块的存在是有原因的 - 允许程序优雅地处理可能导致应用程序崩溃或导致意外行为或结果的错误。依赖全局错误处理程序来捕获 otherwise 未处理的异常是一种糟糕的设计方法。一个设计良好的程序将同时具有 - try catch 块来处理某些条件已知可能的条件,以及一个全局处理程序来捕获任何真正意外的情况。
-
蒂姆的评论应该成为答案。这正是您所需要的 - 简短而准确。
-
全局异常处理程序是否意味着删除不必要的 try catch 块? 不,不必要的 try catch 块 意味着删除 不必要的 try catch 块.