wcf client ip as ipv6

时间:2010-07-15 08:43:09

标签: c# wcf iis-7 wcf-client

我正在使用下一段代码在wcf服务上获取客户端IP:

        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上工作,但一切都还可以,endpoint.Address返回了ipv4。 但在我最近更新到iis7 / server2008 endpoint.Address正在返回ipv6。

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

谢谢!

1 个答案:

答案 0 :(得分: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。