2010-12-20 13 views
2

今、私はすべてのWCFサービス呼び出しを次のtry/catchブロックでラッピングしています。これを1か所に設定してすべてのサービス呼び出しに適用する方法があるのだろうかと思います。クライアント上の1つの場所でWCFサーバーの障害を処理する方法はありますか?

try 
{ 
    Product test = client.GetProductById(1); 
} 
catch (TimeoutException ex) 
{ 
    WPFMessageBox.Show("The service operation timed out." + ex.Message); 
} 
catch (FaultException<CustomFault> ex) 
{ 
    WPFMessageBox.Show("CustomFault:" + ex.ToString()); 
} 
catch (FaultException ex) 
{ 
    WPFMessageBox.Show("Unknown Fault:" + ex.ToString()); 
} 
catch (CommunicationException ex) 
{ 
    WPFMessageBox.Show("There was a communication problem" + ex.Message + 
         ex.StackTrace); 
} 

答えて

4

public T ServiceCallWrapper<T>(Func<T> serviceCallDelegate) 
{ 
    try 
    { 
     return serviceCallDelegate(); 
    } 
    catch (TimeoutException ex) 
    { 
     WPFMessageBox.Show("The service operation timed out." + ex.Message); 
    } 
    catch (FaultException<CustomFault> ex) 
    { 
     WPFMessageBox.Show("CustomFault:" + ex.ToString()); 
    } 
    catch (FaultException ex) 
    { 
     WPFMessageBox.Show("Unknown Fault:" + ex.ToString()); 
    } 
    catch (CommunicationException ex) 
    { 
     WPFMessageBox.Show("There was a communication problem" + ex.Message + 
          ex.StackTrace); 
    } 
} 

を次に、あなたがこのような匿名の方法で例えばラッパーを呼び出すことができます。

Product test = ServiceCallWrapper<Product>(() => client.GetProductById(1)); 
+0

ありがとう、それは素敵でシンプルです。 – Rachel

+0

Jan、このラッパーは、1つ以上のパラメーターを受け入れるが値を返さないメソッドをどのように探すか? (例えば、voidです。)(例:内部静的void LockoutUser(string userID、int timeInSeconds)) – FarrEver

+0

@FarrEver、交換Func メソッドのServiceCallWrapperでのアクション: 'public void ServiceCallWrapper(Action serviceCallDelegate)' – Jan

1

これは、AoPとIoCによって実行できます。ここで

私がどのように書かれている:コード例があり http://pablocastilla.wordpress.com/2010/11/09/aop-and-ioc-in-wcf-4-0-with-enterprise-library-5-and-appfabric-part-1/

。あなたがデリゲートによって渡されたサービスコールを実行するためのコードを取得するラッパー・メソッド書くことができ

+0

クライアントのサーバーフォールトを捕捉する方法を理解していません。少し説明できますか? – Rachel

+0

あなたはAoPスタイルとしてそれらをキャッチします。エンタープライズライブラリの設定では、例外をさまざまな方法で処理するためにクライアントを設定します。 –

+0

ありがとう、私はそれをもう少し調査したいと思いますが、今のところ私は受け入れられている時間がありませんJanの答え – Rachel

関連する問題