捕获当前线程中的所有异常

Posted

技术标签:

【中文标题】捕获当前线程中的所有异常【英文标题】:Catching all exceptions in current thread 【发布时间】:2012-10-16 19:08:39 【问题描述】:

在我的 Web 应用程序中,我有一个单向异步 WCF 服务。在此服务中,我想像在 global.asax Application_Error 中那样捕获所有异常。 我试图处理这些事件:

AppDomain.CurrentDomain.UnhandledException += (s,e) =>  //some logic ;
AppDomain.CurrentDomain.FirstChanceException += (s,e) =>  //some logic ;

甚至尝试过:

//this one is for Win Forms Application
Application.ThreadException += (s,e) =>  //some logic ;

//this one is for Web Application
HttpContext.Current.ApplicationInstance.Error += (s,e) =>  //some logic ;

但是这些处理程序都没有到达。

任何想法,我还能尝试什么?

【问题讨论】:

你需要发布线程本身的代码,否则,没有足够的信息来指导你。 @jgauffin:感谢您的建议。 【参考方案1】:

WCF 允许您将实现 IErrorHandler 的对象插入到 Dispatcher 的错误处理程序中。

MSDN page 有示例代码。

【讨论】:

服务是一种方式,调度程序应该能够处理这个错误吗? 我知道 OneWay 是什么,但我不明白为什么“正常”错误拦截不起作用。【参考方案2】:

如果您将这些代码行放入网页中,它们将会丢失。为什么?

因为网页的生命周期有限。为了使您的事件处理能够继续存在,您需要将其放入全局 asax 文件中。

【讨论】:

不是网页,也没有ASAX文件。 @HenkHolterman:Global.asax 在 ASP.NET 中适用于 WCF @Gev 你说“在我的 Web 应用程序中我有一个单向异步 WCF 服务。在这个服务中我想像在 global.asax Application_Error。”这就是我的答案。 @jgauffin :不,如果您有单向服务,则不会。 @Gev:您也可以将 global.asax 添加到 WCF 项目中。

以上是关于捕获当前线程中的所有异常的主要内容,如果未能解决你的问题,请参考以下文章

多线程捕获线程中的异常

捕获子线程中的异常

多线程情况下如何捕获线程中的异常?

Java多线程之捕获子线程中的异常---面试经

当一个线程遇到异常时是不是可以冻结所有线程

Android 捕获主线程异常崩溃