当前位置:  开发笔记 > 运维 > 正文

.NET 4.0上的System.Net.Dns.GetHostEntry(dnsServer)问题

如何解决《.NET4.0上的System.Net.Dns.GetHostEntry(dnsServer)问题》经验,为你挑选了1个好方法。

我在.NET 2.0/3.5环境中使用以下代码数月(没有问题):

string server="192.168.1.3";
IPHostEntry ipe = System.Net.Dns.GetHostEntry(server);
IPAddress ipa = ipe.AddressList[0];
IPEndPoint ipep = new IPEndPoint(ipa, (int)UdpServices.Domain);

在这里,服务器硬编码为IP地址,但在我的应用程序中,它可能类似于"server.test.com".

将我的项目转换为.NET 4.0时,此代码在直接传递IP地址时仍然停止工作(仍然使用主机名).它崩溃了这个例外:

System.Net.Sockets.SocketException was unhandled
  Message=The requested name is valid, but no data of the requested type was found
  Source=System
  ErrorCode=11004
  NativeErrorCode=11004
  StackTrace:
       at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6)
       at System.Net.Dns.GetHostEntry(String hostNameOrAddress)

因为我需要的只是生成的IPEndPoint,我可以通过使用IPAddress.Parse来生成IPAddress对象来解决这个问题,但我想知道你们是否知道为什么在.NET 4.0中这种行为发生了变化?(如果我们无法从IP地址解析主机名,则会抛出异常).



1> 小智..:

微软在这里回答:

这被故意改为更一致地代表名称解析失败.如果您有只想转换为IP地址的输入字符串,建议您使用IPAddress.TryParse或Dns.GetHostAddresses

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有