Не могу получить правильный IP-адрес клиента на стороне сервера WCF - PullRequest
1 голос
/ 15 марта 2011

Для получения клиентского IP в WCF я использую следующий метод:

public static byte[] GetUserIP(OperationContext context)
        {
            var messageProperties = context.IncomingMessageProperties;
            RemoteEndpointMessageProperty endpointProperty =
                messageProperties[RemoteEndpointMessageProperty.Name]
                as RemoteEndpointMessageProperty;

            return GetIPFromString(endpointProperty.Address);
        }

У моей машины есть локальный IPv4, и этот метод работал до вчерашнего дня. Возможно, наши сетевые администраторы что-то изменили;я не знаю, но теперь endpointProperty.Address возвращает «:: 1», а не «xxx.xxx.xxx.xxx».Может кто-нибудь объяснить, что может вызвать такую ​​вещь?

1 Ответ

3 голосов
/ 15 марта 2011

Это потому, что ваша машина теперь использует обратную связь IPv6 вместо IPv4.

Это также повлияет на IP-адреса в интрасети, поскольку ваши администраторы, вероятно, включили IPv6 по всем направлениям, поэтому машина A будет идентифицировать себя с машиной B по своему адресу IPv6.

В общедоступной среде это вряд ли вызовет проблему, пока весь интернет не перейдет на IPv6.

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

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

...