2009-07-10 124 views
2

我们的WCF服务偶尔产生一个工作线程来处理客户端不关心的事情。工作线程不会将任何状态报告给客户端。事实上,在线程完成时,服务可能已经将结果返回给客户端。处理WCF中的线程异常

最近这些后台线程之一导致了一个异常。异常未处理,所以IIS崩溃。

我可以修复这个特殊的异常,但将来有人可能会添加一些导致另一个意外异常的代码。我想在未来防止这种崩溃。

我知道System.Windows.Forms应用程序可以通过执行Application.ThreadException来处理线程异常。有什么类似的,我可以做一个WCF服务?或者,如果Application.ThreadException是要走的路,我将如何将它与WCF服务挂钩?

AppDomain.UnhandledException的MSDN文档说它不能防止崩溃。文档ServiceModel.AsynchronousThreadExceptionHandler表明它仅适用于WCF线程。

至少,我想在崩溃之前从异常中抓取堆栈跟踪,但避免将来的崩溃完全是理想的。

再一次,让我强调这不是我想作为WCF故障返回给客户端的异常。

回答

1

既然你不知道是什么导致了异常,唯一明智的做法是崩溃。你不知道服务处于什么状态,你可以通过继续让事情变得更糟。

请记住,IIS将为您重新启动服务,干净,并可能正常工作。

+1

请说的downvote的原因。如果不知道他们有什么问题,答案不会有所改善。 – 2009-07-10 17:10:15

+0

我同意这一点...如果你有一个预期的例外,你应该接近它的起源。如果它意外,它应该允许应用程序崩溃。 – 2009-07-10 18:10:20

1

如果你正在产卵的线程,你应该总是确保他们有异常警卫。 AppDomain处理未处理的异常只提供了一种记录和追踪错误的方法,但它不会阻止主机崩溃。