IDispatchMessageInspectorを使用して要求のリモートアドレスを取得する

I'm trying to follow this blog post: http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx

私の目的は、何らかの理由で着信要求のリモートアドレスを取得することですが、何らかの理由でアドレスがいずれのパラメータにも見当たりません、またはnullです。

ここに私が実装しているインターフェースがあります:

public interface IDispatchMessageInspector
{
    object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext);
    void BeforeSendReply(ref Message reply, object correlationState);
}

リモートアドレスを取得しようとしているメソッドは、 AfterReceiveRequest です。 requestchannel の両方のパラメータを確認しました。また、 channel.RemoteAddress は必要な場所ですが、何らかの理由でそのプロパティがnullになっているようです。 request パラメータもnullですが、私はPOSTではなくGETを行っているので、それを推測しています。

以下は、これをテストするために呼び出すメソッドのシグネチャです。

[OperationContract, WebGet( UriTemplate = "{*path}", ResponseFormat = WebMessageFormat.Json)]
string[] GetList(string path);
2

3 答え

5
追加された
あなたの2番目の提案はうまくいきました。ありがとうございました。
追加された 著者 rafale,
これはスレッドセーフではありません。私の提案を参照してください。
追加された 著者 paulius_l,

情報は要求ヘッダーにあり、以下を使用して検索されます。

WebHeaderCollection headers = WebOperationContext.Current.IncomingRequest.Headers;
0
追加された
私はある時点でもそれを試しましたが、ヘッダーには私が探していたものがありませんでした。 Yahiaの解決策はうまくいくようです。
追加された 著者 rafale,

IDispatchMessageInspector 実装からこれを使用します。

var remoteEndpoint = request.Properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var ipAddress = remoteEndpoint.Address;
0
追加された