我正在使用下一段代码在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?
谢谢!
答案 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。