1

SOAPリクエストをサービスに渡すことで、他の関係者が消費するWCFサービスを作成しようとしています。クライアントは、対話中に発生する可能性のある一連の FaultExceptions を処理するよう私に要求します。

これには、クライアントが SOAP リクエストの [wsa:To] 要素で不正な形式の Uri を送信した場合、つまりクライアントがたとえばリクエストを送信した場合に、次の内容が含まれている場合が含まれます。

<wsa:To>http//:this.is.invalid/address</wsa:To>

特定の FaultException をスローできるはずです。IDispatchMessageInspector を実装して、操作に到達する前に SOAP 要求をキャプチャしようとしましたが、クライアントが送信した要求に上記の例のように不適切な Uri が含まれている場合、AfterReceiveRequest が呼び出されないため、このタイプのエラーを処理できません。

WCF サービスのトレース ログを有効にするまで、エラーを見つけることができませんでした。

System.UriFormatException、System、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089<br><br>with the description <br><br>例外を処理しています。例外の詳細: System.UriFormatException: 無効な URI: URI スキームが無効です。

問題は、この例外をコードのどこでどのようにキャッチできるかということです。

前もって感謝します、

4

1 に答える 1

0

SOAP ヘッダーwsa:Toには、メッセージの受信者のアドレスが含まれている必要があります。WCFクライアント側フレームワークは、サービス エンドポイント アドレスをwsa:Toヘッダー要素の値として使用することで、これを強制します。WCFサービス側フレームワークがこの要素の検証を強制するかどうかはわかりません。この要素はすでに SOAP メッセージを受信する準備ができているためです。

WCFクライアントが SOAP メッセージを無効なサービス エンドポイントに送信しようとしているため、400 HTTP エラーが表示されます。無効な値を適切にテストするには、無効な値で SOAP XML を作成し、正しいサービス エンドポイントに送信wsa:Toするコードが必要です。wsa:To

WCF がこの値を検証しない場合は、の実装を使用するアプローチが機能するIDispatchMessageInspectorはずです。IDispatchMessageInspectorそれ以外の場合、実装が呼び出される前に WCF が例外をスローした場合は、IErrorHandlerエンドポイントの動作を実装して、この種の "配管内" 例外をキャッチする必要がある場合があります。実装および構成方法については、この素晴らしいブログ投稿を参照してください。

于 2014-01-02T16:15:48.297 に答える