I can´t find a Application.ThreadException
event to listen to on my WCF service. I suppose that this is for WinForms so is there a ThreadException
event for WCF services? Or will they end up in AppDomain.CurrentDomain.UnhandledException
?
3 回答
看起来您需要实现 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
该Application.ThreadException
事件仅用于“处理在Windows 窗体线程中发生的其他未处理的异常”(强调添加,MSDN),因此它在 WCF 服务中没有多大帮助。
你最好的选择是确实使用AppDomain.CurrentDomain.UnhandledException
. 但是请注意,您无法阻止进程退出。此事件仅允许您在“系统默认处理程序向用户报告异常并终止应用程序”之前进行一些日志记录或错误报告。(MSDN)。
你们很多人还想实现自己的IErrorHandler
. 此外,请查看此博客条目,了解一些 WCF 错误处理最佳实践。
这取决于您的客户端框架。WCF 错误在客户端作为异常被抛出,因此像任何其他全局异常处理程序一样处理它们:
Winforms 使用
Application.ThreadException
WPF 使用:
Application.DispatcherUnhandledException
正如克里斯蒂安所说,这些仅适用于“GUI”线程上抛出的异常,但我认为默认情况下,WCF 会将双工服务上的回调编组为这些异常。