我正在使用下一段代码获取 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?
谢谢!
最佳答案
这与其说是 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。
关于c# - wcf 客户端 ip 作为 ipv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3253872/