2011-03-15 44 views
1

正确的客户端IP地址在WCF我用下面的方法获取客户端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”。有人可以解释什么会导致这样的事情?

回答

3

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

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

在公共环境中,在整个interweb转移到IPv6之前不太可能导致问题。

无论哪种方式,您都应该确保您使用IPAddress中的方法来解析端点的IP,而不是手动启动您自己的IP。我设置了一个数据库列,用于跟踪IP地址为varchar(15);我也遇到了类似的问题。工作格里塔,直到我们内部发生同样的事情,突然间所有我的请求日志记录开始打破内部请求!

+0

谢谢你的答案..虽然关于这个,但是:: 1对我来说似乎很陌生..它是否适合IPv6?127.0.0.1 ?! – 0x49D1 2011-03-15 12:32:37

+1

yup :: 1确实是ipv6 loopback。还有其他众所周知的IPv6地址(但它们并没有完全落空)。 – 2011-03-15 12:33:09