我无法在我的WCF服务上找到要监听的Application.ThreadException
事件。我想这是针对WinForms的,所以WCF服务有ThreadException
事件吗?或者他们最终会进入AppDomain.CurrentDomain.UnhandledException
?
答案 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默认会在双工服务上封送回调。