我们的WCF服务偶尔会产生一个工作线程来处理客户端不关心的事情。工作线程不会将任何状态报告回客户端。事实上,该服务可能已经在线程完成时将结果返回给客户端。
其中一个后台线程最近引发了异常。该异常未得到处理,因此IIS崩溃了。
我可以修复此特定异常,但将来有人可能会添加一些导致其他意外异常的代码。我想防止它在将来崩溃IIS。
我知道System.Windows.Forms应用程序可以通过实现Application.ThreadException
来处理线程异常。我可以通过WCF服务做类似的事情吗?或者,如果Application.ThreadException
是可行的方法,我将如何从WCF服务中挂起它?
AppDomain.UnhandledException
的MSDN文档说它不会阻止崩溃。 ServiceModel.AsynchronousThreadExceptionHandler
的文档表明它仅适用于WCF线程。
至少,我想在崩溃之前从异常中获取堆栈跟踪,但是完全避免将来的崩溃是理想的。
再一次,让我强调这不是我想作为WCF故障返回给客户端的例外。
答案 0 :(得分:1)
由于你不知道导致异常的原因,唯一明智的做法就是崩溃。你不知道该服务处于什么状态,你可以继续做下去。
请记住,IIS将为您重新启动服务,清理并可能正常工作。
答案 1 :(得分:1)
如果你正在产生线程,你应该总是确保他们有异常保护。针对未处理异常的AppDomain处理仅提供了记录和跟踪错误的方法,但它不会阻止主机崩溃。
答案 2 :(得分:0)
您可以看一下使用Dispatch Behavior实现IErrorHandler:
http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx