处理和抛出FaultException的最佳实践

时间:2014-07-24 11:26:20

标签: c# wcf exception-handling

我处于需要找到最佳方法的地方,

try
{
  // Service call.
}
 catch (FaultException exception)
      {
        service.Abort();
        throw new FaultException(Resources.UnexpectedErrorOccurredAtServer, exception);
      }

或者

catch (FaultException exception)
      {
        service.Abort();
        throw new Exception(Resources.UnexpectedErrorOccurredAtServer, exception);
      }

//来电。

Main()
{
try
{
 serviceCaller()
}
catch(FaultException ex)
{
  // Should we have this catch???
}
catch( Exception ex)
{
  // Handle unexpected errors.
}

将预期的异常抛给调用者的最佳方法是什么。 如果我们抛出FaultException调用者,main方法应该显式处理它,否则一般异常将起作用。

2 个答案:

答案 0 :(得分:4)

最好的方法是

try
{
  // ...
}
catch (FaultException ex)
{
    service.Abort();
    throw;
}

这会保留堆栈跟踪,而您提出的方法却没有。请参阅Throwing Exceptions best practices

答案 1 :(得分:1)

您可能有兴趣查看WCF error handling and some best practices

最好的方法是: -

try
{
  proxy.SomeOperation();
}
catch (FaultException<MyFaultInfo> ex)
{
  // only if a fault contract was specified
}
catch (FaultException ex)
{
  // any other faults
}
catch (CommunicationException ex)
{
  // any communication errors?
}