2009-07-31 6 views
1

私はWCFサービスを開発しています。エラーがある場合、サービスで呼び出された元のメソッドから受信したパラメータをシリアル化する必要があります。私はすべての例外をキャッチするIErrorHandlerを使用しています。WCF OperationContext

私の最初の考えは、私がのHandleErrorメソッドからアクセスできるように、私はOperationContext.IncomingMessagePropertiesでシリアル化されたパラメータを格納することでした。しかし、これは元のスレッドで実行されていないので、私はOperationContextがnullになると思うので、ProvideFaultメソッドからアクセスすることを検討しています。

これは実現可能なようですか? OneWayサービスコールでも動作しますか?

+0

どのように?私はこれが私がまだ見てきた最も曖昧な質問かもしれないと思います。 –

+0

ハハ、事故のようです(送信ボタンのクイック)。 1ポイントで編集できますか? – flq

答えて

2

ない私は本当に多くのここであなたを助けるが、私が試してみましょうことができますを確認します。

クライアント上で、あなたのコードは、基本的にメソッドを呼び出し、パラメータを渡します。クライアント側のWCFスタックは、ヘッダーとallを使用してSOAPメッセージ(通常はXMLボディを持ちますが、バイナリも可能です)に変換し、そのメッセージをワイヤを介して処理対象のサーバーに送信します。

サーバーは、そのメッセージをオブジェクトに逆シリアル化しようとし、サーバー実装オブジェクトでメッセージを呼び出そうとします。クライアントと同じように、サーバオブジェクト上のそのメソッドは同じパラメータを持つ可能性が高くなりますが、そのメソッドが呼び出される前に呼び出しが失敗する可能性があります。

それでは、私が言うことをしようとしていることです:あなたは、そのパラメータを使用して、サーバ側のメソッドが実際に呼び出されるという事実に頼ることはできません - 例えばに問題があったかもしれませんメッセージの形式、ヘッダーの欠落などによってサーバー側が失敗し、サーバー側のメソッドが呼び出される前に例外がスローされます。

最後に、IErrorHandlerには、メッセージやメソッドとそのパラメータを保持する方法がありません。サーバー上で発生したエラーと、それを使ってSOAPフォルトにすることができます。

クライアント側とサーバー側の両方で、WCFスタックにプラグインする新しい動作を作成し、呼び出されるメソッドとその中に渡されるパラメータを記録します。 WCFのIParameterInspectorインターフェイスを実装しています。しかし、クライアントとサーバー上のメッセージが正しくデシリアライズされ、サーバー側のメソッドが実際に呼び出された場合にのみ呼び出されます。

は、WCFの拡張性に関する詳しい情報は、これらのリンクのいくつかをチェックアウト:

希望、これはビットを助け!

マーク

関連する問題