基本的には、ProvideFault
メソッドを実装して、WCFサービスからのあらゆる種類の例外をキャッチしてクライアントに送信するためのIErrorHandler
インターフェイスを実装しています。IErrorHandlerを使用したWCF例外処理
しかし、私は1つの重大な問題に直面しています。すべての例外はクライアントにFaultException
として送信されますが、これにより、クライアントがサービスで定義した特定の例外を処理できなくなります。
考慮:OperationContract
の実装の1つで定義されてスローされているSomeException
。例外がスローされると、その次のコードを使用して、障害に変換:これは文字列としてエラーを送信ん
var faultException = new FaultException(error.Message);
MessageFault messageFault = faultException.CreateMessageFault();
fault = Message.CreateMessage(version, messageFault, faultException.Action);
を、クライアントはのような一般的な例外をキャッチすることがあります。
try{...}
catch(Exception e){...}
をそしてません:InvalidOperationExceptionが同様
SomeExceptionようtry{...}
catch(SomeException e){...}
だけでなく、カスタム例外が、システム例外は、上記のプロセスを使用してキャッチすることはできません。
この動作を実装する方法についてのご意見はありますか?
どの方法火災のHandleError後:
ここで行動クラスですか? – KumarHarsh
エラーハンドラをクライアント側にのみ添付できますか?これを可能にするのは、サービスレベルではなく、 'ClientBase'実装に接続したいのですか? –
Shimmy
確かに。私はこのようなヘルパーメソッドを使用します: var factory = new ChannelFactory(binding、endpointAddress); factory.Endpoint.EndpointBehaviors.Add(new PassthroughExceptionHandlingBehavior()); return factory.CreateChannel(); –