2009-09-02 9 views
1

私はSilverlightクライアントからWCFサービスを呼び出しているため、すべての呼び出しを非同期にしています。非同期WCF呼び出しでFaultExceptionsを処理する最適な方法は何ですか?

WCFサービスがExceptionFaultを返すと、エラーオブジェクトが完成し、イベントハンドラの引数に移入ます...

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

FaultExceptionにe.Errorを変換するための最善のアプローチは何ですか?

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

をつまるところ、私はそれがnullでない場合e.Errorをスローするように、2番目のオプションを好みます。その結果、コードは同期メソッドの呼び出しの場合と同じ構造になります。

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

このテクニックはスタックトレースを変更して、例外がスロー'。 –

関連する問題