在异步WCF调用中处理FaultExceptions的最佳方法是什么?

时间:2009-09-02 09:58:36

标签: c# wcf asynchronous

我正在从Silverlight客户端调用WCF服务,因此将所有调用都设置为异步。

当WCF服务返回ExceptionFault时,错误对象将填充在Completed事件处理程序的参数中...

proxy.UpdateCompleted += (o, e) =>
 {
     if(e.Error != null)
            .... do something
 }

将e.Error转换为FaultException的最佳方法是什么?

if (e.Error is FaultException<InvalidOperationFault>)
{
  var fault = e.Error as FaultException<InvalidOperationFault>;    
  ... do something
}

try
{
   throw e.Error
}
catch(FaultException<InvalidOperationFault> fault)
{
   ... do something
}

或者你能提出更好的建议吗?

2 个答案:

答案 0 :(得分:2)

我更喜欢第二个选项,如果它不为null,则抛出e.Error。这样,生成的代码的结构与同步方法调用的结构相同:

try
{
  if ( e.Error != null ) 
    throw e.Error;
  // ...
}
catch ( FaultException<ValidationFault> fault ) { /* ... */ }
catch ( FaultException<MyServiceFault> fault ) { /* ... */ }
// ...
finally { /* ... * }

答案 1 :(得分:0)

这只是归结为C#

中缺少Switch on类型支持

Is there a better alternative than this to 'switch on type'?