处理WCF中的线程异常

时间:2009-07-10 16:32:54

标签: wcf multithreading exception-handling

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

其中一个后台线程最近引发了异常。该异常未得到处理,因此IIS崩溃了。

我可以修复此特定异常,但将来有人可能会添加一些导致其他意外异常的代码。我想防止它在将来崩溃IIS。

我知道System.Windows.Forms应用程序可以通过实现Application.ThreadException来处理线程异常。我可以通过WCF服务做类似的事情吗?或者,如果Application.ThreadException是可行的方法,我将如何从WCF服务中挂起它?

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

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

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

3 个答案:

答案 0 :(得分:1)

由于你不知道导致异常的原因,唯一明智的做法就是崩溃。你不知道该服务处于什么状态,你可以继续做下去。

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

答案 1 :(得分:1)

如果你正在产生线程,你应该总是确保他们有异常保护。针对未处理异常的AppDomain处理仅提供了记录和跟踪错误的方法,但它不会阻止主机崩溃。

答案 2 :(得分:0)

您可以看一下使用Dispatch Behavior实现IErrorHandler:

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx