要在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”。有人可以解释一下会导致这种情况的原因吗?
答案 0 :(得分:3)
这是因为您的计算机现在使用IPv6环回而不是IPv4。
它也会影响内部网IP地址,因为您的管理员可能已经全面启用了IPv6 - 因此机器A将使用它的IPv6地址向机器B标识自己。
在公共环境中,在整个互联网迁移到IPv6之前,不太可能导致问题。
无论哪种方式,您都应该确保使用IPAddress
中的方法来解析端点的IP,而不是手动启动自己的IP。
当我设置一个用于跟踪IP地址为varchar(15)的数据库列时,我也遇到了类似的问题。工作greta,直到我们内部发生同样的事情,突然我的所有请求记录开始打破内部请求!