Использование 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
, Я проверил оба параметра request
а также channel
, Кроме того, кажется, что channel.RemoteAddress
где это должно быть, но это свойство является нулевым по какой-то причине. request
Параметр также нулевой, но я предполагаю, что это потому, что я делаю GET, а не POST.
Ниже приведена подпись метода, который я вызываю, чтобы проверить это.
[OperationContract, WebGet( UriTemplate = "{*path}", ResponseFormat = WebMessageFormat.Json)]
string[] GetList(string path);
3 ответа
Использование OperationContext.Current.IncomingMessageHeaders.From
ИЛИ ЖЕ
(OperationContext.Current. IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty).Address
ИЛИ ЖЕ
HttpContext.Current.Request.UserHostAddress
(ВНИМАНИЕ, этот требует настройки <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
)
Используйте это из IDispatchMessageInspector
реализация:
var remoteEndpoint = request.Properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var ipAddress = remoteEndpoint.Address;
Информация будет в заголовках запросов, найденных с помощью:
WebHeaderCollection headers = WebOperationContext.Current.IncomingRequest.Headers;