【问题标题】:WCF Rest .NET 4.0 Unhandled ExceptionsWCF Rest .NET 4.0 未处理的异常
【发布时间】:2011-12-20 10:51:45
【问题描述】:

我发现了一堆非常接近我需要的问题。但我担心我错过了一些重要信息。

如何在 .NET 4.0 中使用 WCF Rest 捕获所有未处理的异常?

出于安全目的,我不希望客户端出现未处理的异常。我想记录所有异常,对于未知异常只需发回 500 Internal Server Error。

到目前为止,我最好的研究告诉我,我需要实现 IErrorHandler 并针对已知异常抛出 WebFaultExceptions。我遇到的一个问题是,我的所有业务逻辑都位于与 WCF 服务不同的项目中,并且从底层类库中抛出 Web 异常是没有意义的,因为该类库可能会被另一个进程使用可能不是 WCF 休息服务。有没有很好的方法来映射异常?

【问题讨论】:

    标签: .net wcf exception rest


    【解决方案1】:

    是的,您可以实现IErrorHandler 并使用它来映射异常。您无需从业务逻辑中抛出 WebFaultException,只需抛出您的自定义异常即可。

    例如,您可以将YourCustomException 映射到一些简单的 json 字符串。您可以放置​​一些对象,而不是字符串。示例IErrorHandler.ProvideFault 实现:

    public void ProvideFault(Exception error, MessageVersion version, ref Message fault) 
    {        
            if (error is YourCustomException)
            {
                fault = Message.CreateMessage(version, string.Empty, String.Format("Error: {0}.", error.Message), new DataContractJsonSerializer(typeof(string)));
                fault.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Json));
    
                webOperationContextWrapper.SetOutgoingResponseStatusCode(HttpStatusCode.InternalServerError);
            }
    }
    

    所以当YourCustomException 被业务逻辑抛出时,它将被处理程序捕获并转换为正确的错误。

    另请参阅:CodeProject article

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 2014-11-22
      • 1970-01-01
      • 2011-04-28
      相关资源
      最近更新 更多