2011-12-19 11 views
3

DBと通信するWCFサービスがあります。すべての操作はサービスを通過します。 例外をクライアント(この場合はWPFアプリケーション)に返す最適な方法は何ですか。例外の処理WCFサービスを使用したWPFアプリケーション

私は顧客のリストを返すサービスでGetCustomerを持っていると言います。しかしこれには例外がありました。この例外をクライアントに戻すにはどうすればよいですか?

答えて

-1

これを行う1つの方法は、潜在的な例外についての情報をサービス契約の一部にすることです。したがって、あなたの例では、GetCustomerはお客様のリストを返します。発生した例外に関するデータのセットを返します。あなたのサービスのすべての消費者が.NETアプリケーションを送信するわけではなく、.NETエラーの送信に依存するのが賢明でないため、これは良い考えです。

+0

-1よりも優れたサンプルです:これは良いでしょう理由を明記してください。 –

3

マイクロソフトは 例外がスローされたときに明示的がIErrorHandlerインターフェイスを実装し、ErrorHandlersプロパティに それを追加し、アプリケーションの動作を制御するにはWCFの例外

ためIErrorHandlerの実装をお勧めします。 IErrorHandlerを使用すると、明示的に SOAPフォールトを制御し、クライアントに を送り返すかどうかを決定し、ログなどの関連タスクを実行できます。エラー ハンドラは、 ErrorHandlersプロパティに追加された順に呼び出されます。

がクライアントに返された障害メッセージを制御するためにProvideFaultメソッドを実装します。

ように、エラーに関連した行動を確保するためのHandleErrorメソッドを実装し、エラーログを含む 、速い失敗確保し、 アプリケーションをシャットダウンし、。

Here MSDN

IMyService proxy = ...; //Get proxy from somewhere 
try { 
    proxy.MyMethod(); 
} 
catch (CommunicationException) { ... } 
catch (TimeoutException) { ... } 
catch (FaultException<MyApplicationFault> myFault) { 
    MyApplicationFault detail = myFault.Detail; 
    //Do something with the actual fault 
} 
catch (FaultException otherFault) { ... } 
+0

あなたの例では、この例外/障害をどのようにクライアントに返しますか? – VoodooChild

+0

サービスから例外を返すのではなく、サービスからスローします。new FaultException (fault);クライアントは上記のコードをキャッチします。 –

関連する問題