有没有办法捕获给定类抛出的所有未处理的exception?

我知道如何捕获给定线程中的所有未处理的exception ,但想知道是否有办法捕获给定类抛出的所有未处理的exception而不是将每个调用包装在try catch块中。

如果无法做到这一点(可能是这种情况),你会如何达到同样的效果?

为了给出一些上下文,我使用自定义编码服务代理,将应用程序的其余部分与服务数据协定(WCF)分离。 我基本上需要捕获错误,以便我可以提取特定字段(内部描述等),将它们打包成自定义exception并再次抛出它。

任何帮助赞赏。

如果是关于WCFexception,我建议将专用行为插入到WCF管道中。 我在这里写了一个详细的例子

它基于两个接口IErrorHandler和IServiceBehavior,它也可用作属性和基于文件的配置。

不,exception处理与线程密切相关,因为线程执行代码 – 类不会。

此外,没有理由在try / catch中包装所有调用。 在不知道您的代码的情况下,这很可能不是正确的事情。 exception处理使您无需在本地处理每个错误。 拥抱它,你的代码将变得更加简单。

根据您对@Brians的评论回答:

我需要在(wcf)服务代理中捕获错误exception,以便获得有意义的描述

不要那样做。 如果你想要一个有意义的消息,那么抛出你自己的自定义exception(你也可以使用一个框架的exception,但使用你自己的exception更好)。 在抛出它的位置捕获Systemexception(即FileNotFoundException,SQLexception等),重新抛出为您自己的自定义exception。

并且重新投掷上层可以按照他们认为合适的方式处理它

在服务边界,您可以捕获自定义exception(因为您确切地知道您要查找的内容,您可以捕获基本exception以获取所有衍生产品),然后将消息删除并以合适的方式将其打包并将其返回给来电者。

或者更好的是你可以使用IErrorHandler接口 ( 这里是MSDN doco )。

我不知道有什么方法可以捕获给定类抛出的所有未处理的exception。

为了实现您想要做的事情,有一件事是创建一个包装类,它调用原始类并捕获所有exception。 然后在原始类中,您可以使用包装器类,而无需每次都编写try catch块。

我认为您应该查看Enterprise Library或PostSharp工具。 例如,您可以使用Enterprise Library并编写自定义exception处理程序,它将处理所有exception(或仅处理其中一些exception)并记录它们或编写用户友好消息。 但我认为只有在您需要实现日志记录或某些数据回退(还原)时才应使用此方法。 您应该始终将它们重新抛出到应显示用户友好消息的UI层。

正如EFrank建议的那样,企业库和类似工具会生成包装器,但是它们会自动生成它们,而这些包装器是透明的,因此您只需调用类的方法,甚至无法知道您正在使用代理。

企业库有WCF支持,所以我认为这应该是您的选择

试试ELMAH它会处理任何未处理的exceptionhttps://code.google.com/p/elmah/