1

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?

4

3 回答 3

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

于 2012-03-09T08:50:39.023 回答
0

Application.ThreadException事件仅用于“处理在Windows 窗体线程中发生的其他未处理的异常”(强调添加,MSDN),因此它在 WCF 服务中没有多大帮助。

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

你们很多人还想实现自己的IErrorHandler. 此外,请查看此博客条目,了解一些 WCF 错误处理最佳实践。

于 2012-03-09T08:49:18.863 回答
0

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

Winforms 使用

Application.ThreadException

WPF 使用:

Application.DispatcherUnhandledException

正如克里斯蒂安所说,这些仅适用于“GUI”线程上抛出的异常,但我认为默认情况下,WCF 会将双工服务上的回调编组为这些异常。

于 2012-03-09T09:16:22.147 回答