使用IDispatchMessageInspector获取请求的远程地址

时间:2011-11-12 00:49:45

标签: c# wcf idispatchmessageinspector

我正在尝试关注此博文:http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx

我的目标是以某种方式获取传入请求的远程地址,但由于某种原因,地址要么在任何参数中都无法看到,要么为空。

这是我正在实施的界面:

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,但我猜是因为我正在进行GET而不是POST。

下面是我正在调用的方法的签名。

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

3 个答案:

答案 0 :(得分:5)

使用OperationContext.Current.IncomingMessageHeaders.From

OR

(OperationContext.Current. IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty).Address

OR

HttpContext.Current.Request.UserHostAddress(请注意,这需要设置<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

答案 1 :(得分:0)

信息将位于请求标头中,使用以下命令找到:

WebHeaderCollection headers = WebOperationContext.Current.IncomingRequest.Headers;

答案 2 :(得分:0)

IDispatchMessageInspector实施中使用此功能:

var remoteEndpoint = request.Properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var ipAddress = remoteEndpoint.Address;