【发布时间】:2012-08-24 00:27:01
【问题描述】:
我正在使用由 WCF 服务支持的 ASP.NET 站点,该服务随机抛出异常,最终在站点上捕获,并在那里创建 YSOD。我怀疑这是由于后端的线程问题造成的,并希望跟踪该问题。
是否有一种简单的方法可以在 WCF 端捕获未捕获的异常,同时捕获所有正在运行的线程的堆栈跟踪,并使用附加信息重新抛出初始异常?
这个多线程跟踪看起来像是框架附带的东西,或者其他人以前可能想过,但我似乎找不到任何东西。
【问题讨论】:
-
您应该仍然能够挂接到 AppDomain.UncaughtException 事件。
-
“最终”听起来很像终结器中的异常......异常是什么? “最终”也让我认为其他线程的堆栈跟踪不会有帮助,因为它们不再代表导致异常的系统状态。您是否有机会使用
TaskAPI? -
@Marc 最终是因为 WCF 通道有时会超时。在这一点上,所有的希望都失去了,但其他时候,我们得到了一个真正的例外,但不能回购它。我希望通过快照,它可以提供一些方向。
-
@MarcGravell 我们没有在中间层使用任务 API。如果是多线程问题,我认为这是由于并发 WCF 请求/线程,围绕一些共享的“资源”。
-
我认为其他线程的堆栈跟踪对您来说并不重要。如果其他线程正在运行,那么他们正在做与您的请求线程无关的事情。如果他们正在丢弃共享数据,那么他们可能已经从他们这样做时的位置继续前进。
标签: c# .net multithreading wcf exception