2010-07-15 97 views
3

我使用接下来的一段代码来获得对WCF服务的客户端IP:WCF客户端IP作为IPv6的

 OperationContext context = OperationContext.Current; 
     System.ServiceModel.Channels.MessageProperties prop = context.IncomingMessageProperties; 
     System.ServiceModel.Channels.RemoteEndpointMessageProperty endpoint = prop[System.ServiceModel.Channels.RemoteEndpointMessageProperty.Name] as System.ServiceModel.Channels.RemoteEndpointMessageProperty; 
     string ip = endpoint.Address; 

而这段代码在IIS6工作/ SERVER2003一切都OK,endpoint.Address返回的IPv4。 但我最近更新到iis7/server2008 endpoint.Address是返回ipv6。

是否仍然可以在iis7/server2008上获得ipv4?

谢谢!

回答

3

这不是WCF中的变化,而是网络中的变化。您的客户已经使用其IPv6连接到服务器,并且这是存储在消息上下文中的地址。如果您需要掌握IPv4,请使用以下代码片段:

IPAddress ipAddress = IPAddress.Parse(ipv6); 
    IPHostEntry ipHostEntry = Dns.GetHostEntry(ipAddress); 
    foreach (IPAddress address in ipHostEntry.AddressList) 
    { 
      if(address.AddressFamily == AddressFamily.InterNetwork) 
        Console.WriteLine(address); 
    } 

这会将您的IPv6转换为IPv4。