【问题标题】:Catch unhandled exception in WCF在 WCF 中捕获未处理的异常
【发布时间】:2011-02-13 14:42:50
【问题描述】:

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

【问题讨论】:

  • 为什么要捕获未处理的异常?你想对他们做什么?您想在客户端还是在服务中执行此操作?
  • 一个目标可能是将异常捕获/记录到 WCF 诊断跟踪之外的标准日志文件中。
  • 到目前为止你发现了吗?我也在尝试做类似的事情但没有成功

标签: .net wcf exception-handling unhandled-exception


【解决方案1】:

是的,创建一个实现IErrorHandler接口的类:

允许实现者控制返回给调用者的错误消息,并可选择执行自定义错误处理,例如日志记录。

【讨论】:

  • 很复杂,能给个样本吗?并且,需要它到服务器端。不是客户。谢谢
  • 对此答案的迟到者请注意:WCF 数据服务中未使用 IErrorHandler 实现。在您的 DataService 中,覆盖 HandleException。如果你是自托管,还要考虑处理:AppDomain.CurrentDomain.UnhandledException 和 TaskScheduler.UnobservedTaskException
【解决方案2】:

你应该做内部和外部的 TRY/Catch 块。

所以第一种方法以 Try 开头

然后,如果在另一个方法中抛出任何东西,它默认为您在公开方法中的方法中的通用捕获,以将值返回给客户端。

我总是在我的 catch 块中使用日志记录来告诉管理员出了什么问题,但我总是让外部 catch 返回一个值,例如“请除了我们的 Appogies 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 个 wcf 服务方法。 ASP.NET 中是否有任何类似于 global.asa 中的“onerror”事件来捕获所有未处理的异常?
猜你喜欢
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
相关资源
最近更新 更多