我正在尝试关注此博文: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
。我检查了参数request
和channel
。此外,channel.RemoteAddress
似乎应该是它的位置,但由于某种原因,该属性为null。 request
参数也是null,但我猜是因为我正在进行GET而不是POST。
下面是我正在调用的方法的签名。
[OperationContract, WebGet( UriTemplate = "{*path}", ResponseFormat = WebMessageFormat.Json)]
string[] GetList(string path);
答案 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;