2011-11-02 140 views
1

我发现了一堆非常接近我需要的问题。但是我担心我错过了一些重要的信息。WCF Rest .NET 4.0未处理的异常

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

为了安全起见,我不希望未处理的异常进入客户端。我想记录所有异常,并且发现500个内部服务器错误。

迄今为止,我的最佳研究告诉我需要实现IErrorHandler并为已知的异常抛出WebFaultExceptions。我遇到的一个问题是,我的所有业务逻辑都与WCF服务位于一个单独的项目中,并且从基础类库中抛出Web异常是没有意义的,因为类库可能会被另一个进程可能不是WCF 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