WCF服务上的Application.ThreadException?

时间:2012-03-09 08:40:08

标签: c# .net wcf exception-handling thread-exceptions

我无法在我的WCF服务上找到要监听的Application.ThreadException事件。我想这是针对WinForms的,所以WCF服务有ThreadException事件吗?或者他们最终会进入AppDomain.CurrentDomain.UnhandledException

3 个答案:

答案 0 :(得分:0)

Application.ThreadException事件仅用于“处理 Windows窗体线程中出现的其他未处理的异常”(强调添加,MSDN),因此它不是在WCF服务中提供了很多帮助。

最好的办法是确实使用AppDomain.CurrentDomain.UnhandledException。但请注意,您无法阻止进程退出。此事件仅允许您在“系统默认处理程序向用户报告异常并终止应用程序”之前执行一些日志记录或错误报告。 (MSDN)。

你们许多人也希望实现自己的IErrorHandler。另外,请结帐this blog entry,了解一些WCF错误处理最佳做法,同时了解最新做法。

答案 1 :(得分:0)

看起来你需要实现IErrorHandler: http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx

然后使用您的ServiceHost注册您的处理程序: http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.channeldispatcher.errorhandlers.aspx

看起来您也可以使用自定义属性连接IErrorHandlers,如下所述:http://msdn.microsoft.com/en-us/library/ms751439.aspx

答案 2 :(得分:0)

这取决于您的客户端框架。 WCF错误在客户端被抛出为异常,因此像处理任何其他全局异常处理程序一样处理它们:

Winforms使用

Application.ThreadException

WPF使用:

Application.DispatcherUnhandledException

正如Christian所说的那样,这些只是针对“GUI”线程抛出的异常,但我认为WCF默认会在双工服务上封送回调。