我处于需要找到最佳方法的地方,
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方法应该显式处理它,否则一般异常将起作用。
答案 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?
}