Использование IDispatchMessageInspector для получения удаленного адреса запроса - PullRequest
2 голосов
/ 12 ноября 2011

Я пытаюсь следить за этим сообщением в блоге: 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.Я проверил оба параметра request и channel.Кроме того, кажется, что channel.RemoteAddress находится там, где и должно быть, но это свойство по какой-то причине равно нулю.Параметр request также нулевой, но я предполагаю, что это потому, что я делаю GET, а не POST.

Ниже приведена подпись метода, который я вызываю для проверки этого.

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

Ответы [ 3 ]

5 голосов
/ 12 ноября 2011

Использование OperationContext.Current.IncomingMessageHeaders.From

ИЛИ

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

OR

HttpContext.Current.Request.UserHostAddress (ВНИМАНИЕ, для этого требуется настройка <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>)

0 голосов
/ 15 марта 2018

Используйте это из IDispatchMessageInspector реализации:

var remoteEndpoint = request.Properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var ipAddress = remoteEndpoint.Address;
0 голосов
/ 12 ноября 2011

Информация будет в заголовках запроса, найденных с помощью:

WebHeaderCollection headers = WebOperationContext.Current.IncomingRequest.Headers;
...