捕获WCF中未处理的异常

5
在WCF中,是否有一个可以捕获未处理异常的事件或方法,还是我需要在任何方法中放置try/catch?

你为什么想要捕获未处理的异常?你想对它们做什么?你想在客户端还是服务端进行此操作? - John Saunders
一个目标可能是将异常捕获/记录到标准日志文件中,而不是 WCF 诊断跟踪。 - Jeremy
你目前找到了吗?我也在尝试类似的事情,但没有成功。 - Ton
2个回答

7
是的,创建一个实现 IErrorHandler 接口的类:
允许实现者控制返回给调用方的故障消息,并可选择执行自定义错误处理,如日志记录。

1
非常复杂,你能给一个示例吗?并且需要在服务器端实现,而不是客户端。谢谢。 - zvi
1
对于这个答案的后来者需要注意:在WCF数据服务中不使用IErrorHandler实现。在您的DataService<T>中,重写HandleException方法。如果您是自托管,请考虑处理以下内容: AppDomain.CurrentDomain.UnhandledException和TaskScheduler.UnobservedTaskException。 - Adam Caviness

0

您应该使用内部和外部的TRY/Catch块。

因此,第一个方法以Try开头

然后,如果在另一个方法中抛出任何内容,则默认为在公开方法中的通用catch中返回值给客户端。

我总是在我的catch块中使用日志记录,告诉管理员出了什么问题,但我总是让外部catch返回一个类似于“请原谅我们的应用程序暂时失效。WCF.Blah服务已失败。请查看服务器日志获取完整详细信息”的值。

这样,您就可以处理错误、记录日志并向客户发送良好的消息。

public class Service1 : IService1
    {
    public string GetData(int value)
    {
        try
        { 
            return somemethod(value);
        }
        catch(Exception ex)
        {
            LoggingHelper.Log(ex);
            return "Please Except our Appogies the WCF.Blah service has failed. Please review the server logs for complete details";
        }
    }

1
我需要超过1个WCF服务方法。在ASP.NET中是否有类似于global.asa中的“onerror”事件,可以捕获所有未处理的异常? - zvi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接