2

我正在尝试关注这篇博文: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是它应该在的地方,但由于某种原因,该属性为空。该request参数也是空的,但我猜那是因为我正在执行 GET 而不是 POST。

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

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

3 回答 3

5

采用OperationContext.Current.IncomingMessageHeaders.From

或者

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

或者

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

于 2011-11-12T01:03:35.070 回答
1

IDispatchMessageInspector实现中使用它:

var remoteEndpoint = request.Properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var ipAddress = remoteEndpoint.Address;
于 2018-03-15T08:52:24.417 回答
0

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

WebHeaderCollection headers = WebOperationContext.Current.IncomingRequest.Headers;
于 2011-11-12T01:21:10.960 回答