Как получить IP-адрес удаленной конечной точки WCF? - PullRequest
24 голосов
/ 24 декабря 2008

Есть ли способ получить удаленный IP-адрес соединения WCF?

Полагаю, причина, по которой он не встроен в инфраструктуру WCF, заключается в том, что WCF может работать с привязками, отличными от TCP / IP, поэтому IP-адрес не всегда имеет смысл.

Однако эта информация будет иметь смысл для всех широко используемых привязок (насколько я знаю: BasicHttp, DualHttp, WSHttp и NetTcp).

IP-адрес, вероятно, доступен с помощью рефлексии, но я бы лучше нашел документированный способ получить его, чем взламывать классы фреймворка.

Я погуглил по этому вопросу, и, похоже, многие столкнулись с ним, не найдя достойного решения (Обычный ответ - полагаться на заголовки сообщений , но это подразумевает доверие к клиент должен предоставить свой реальный IP-адрес, который не подходит, если вы хотите зарегистрировать IP-адрес по соображениям безопасности)

Ответы [ 3 ]

14 голосов
/ 24 декабря 2008

Очевидно, что он был добавлен в 3.5 через RemoteEndpointMessageProperty ; см здесь .

3 голосов
/ 29 марта 2014
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string address = endpoint.Address;
2 голосов
/ 24 декабря 2008

, если вы на стороне службы и хотите получить IP-адрес клиента, вы должны проверить свойства сообщения OperationContext. посмотрите здесь или ч прежде например

...