DBと通信するWCFサービスがあります。すべての操作はサービスを通過します。 例外をクライアント(この場合はWPFアプリケーション)に返す最適な方法は何ですか。例外の処理WCFサービスを使用したWPFアプリケーション
私は顧客のリストを返すサービスでGetCustomerを持っていると言います。しかしこれには例外がありました。この例外をクライアントに戻すにはどうすればよいですか?
DBと通信するWCFサービスがあります。すべての操作はサービスを通過します。 例外をクライアント(この場合はWPFアプリケーション)に返す最適な方法は何ですか。例外の処理WCFサービスを使用したWPFアプリケーション
私は顧客のリストを返すサービスでGetCustomerを持っていると言います。しかしこれには例外がありました。この例外をクライアントに戻すにはどうすればよいですか?
これを行う1つの方法は、潜在的な例外についての情報をサービス契約の一部にすることです。したがって、あなたの例では、GetCustomerはお客様のリストを返します。発生した例外に関するデータのセットを返します。あなたのサービスのすべての消費者が.NETアプリケーションを送信するわけではなく、.NETエラーの送信に依存するのが賢明でないため、これは良い考えです。
マイクロソフトは 例外がスローされたときに明示的が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) { ... }
あなたの例では、この例外/障害をどのようにクライアントに返しますか? – VoodooChild
サービスから例外を返すのではなく、サービスからスローします。new FaultException
-1よりも優れたサンプルです:これは良いでしょう理由を明記してください。 –