私が取り組んでいるサービスのためのWebテストクライアントを作成しています。そのための要件の一部として、完全な要求と応答のSOAPメッセージ(およびユーザーへのHTTPヘッダー)。WCFのクライアントメッセージインスペクタからヘッダー値を取得する方法
私は、それぞれの要求&応答メッセージへのアクセスを得るために最も顕著BeforeSendRequest
とAfterReceiveReply
方法、IClientMessageInspectorを実装MessageInspectorクラスを実装しました。
レスポンス(AfterReceiveReply)をキャプチャするのは効果的ですが、リクエストをキャプチャするのは部分的にしか動作しません。ほとんどのメッセージにアクセスできますが、SOAPヘッダーとHTTPヘッダーは両方とも空です。 Fiddlerでリクエストを見ると、WCFがSOAPヘッダーのセキュリティーヘッダーと「束」を送信していることがわかります。
私BeforeSendRequest
方法は、私はHTTPとセキュリティヘッダが欠落している理由はわからないんだけど...それの要旨は...
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
this.RequestMessage = request.ToString(); // Security header is missing from message
// Try to get HTTP headers
object req; // req is always null
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out req))
{
this.RequestHeaders = ((HttpRequestMessageProperty)req).Headers;
}
return null;
}
非常に簡単です。これを行うより良い方法はありますか?
- ウェイン
優秀な情報...ありがとう。カスタムメッセージエンコーダーのルートに行きます。 – WayneC
私はあなたの記事に基づいてメッセージのすべてのSOAPヘッダーを取得する非常に簡単な方法を実際に見つけました:http://blogs.msdn.com/b/carlosfigueira/archive/2011/08/02/wcf-extensibility-system -diagnostic-tracing.aspx。私は基本的にカスタムセッショントレースリスナーを作成し、関連するメッセージをHTTPセッションに保存しました。このセッションはGUIで取得して表示できます。 – WayneC