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

raf*_*ale 2 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);
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取远程地址的方法是AfterReceiveRequest.我检查了两个参数requestchannel.此外,它似乎应该channel.RemoteAddress是它应该是,但由于某种原因该属性为空.该request参数也为null,但我猜这是因为我正在进行GET而不是POST.

下面是我正在调用以测试它的方法的签名.

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

Yah*_*hia 5

使用 OperationContext.Current.IncomingMessageHeaders.From

要么

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

要么

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