捕获当前线程中的所有异常
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 项目中。以上是关于捕获当前线程中的所有异常的主要内容,如果未能解决你的问题,请参考以下文章