无法在服务器端WCF上获得正确的客户端IP地址

时间:2011-03-15 12:26:38

标签: c# wcf client ip

要在WCF中获取客户端IP,请使用以下方法:

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 个答案:

答案 0 :(得分:3)

这是因为您的计算机现在使用IPv6环回而不是IPv4。

它也会影响内部网IP地址,因为您的管理员可能已经全面启用了IPv6 - 因此机器A将使用它的IPv6地址向机器B标识自己。

在公共环境中,在整个互联网迁移到IPv6之前,不太可能导致问题。

无论哪种方式,您都应该确保使用IPAddress中的方法来解析端点的IP,而不是手动启动自己的IP。

当我设置一个用于跟踪IP地址为varchar(15)的数据库列时,我也遇到了类似的问题。工作greta,直到我们内部发生同样的事情,突然我的所有请求记录开始打破内部请求!