2011-02-04 140 views
7

我有一个非常具体的问题有关Dns.GetHostEntry:Dns.GetHostEntry错误情况和解决方法

服务使用Dns.GetHostEntry检索主机的所有IP不会忽略,使用的主机名。这一直运行良好。 在特定的客户,查询特定主机时,Dns.GetHostEntry抛出“没有这样的主机是已知的”错误。只有在尝试解析位于与安装服务的计算机不同的域上的主机时,才会出现此问题。该服务已经工作了一段时间,但最近停止工作,抛出“没有这样的主机是已知的”错误(遗憾的是,没有堆栈跟踪可用)。 Nslookup虽然工作,没有问题。 有问题的服务是用VB.NET编写的,面向.NET Framwork 2.0。

.NET 3.0条目中的注释(http://msdn.microsoft.com/en-us/library/ms143998(v=VS.85).aspx)指出主机的反向DNS条目可能存在问题,但我无法在测试网络上重现问题,即使所有反向删除查找区域(对于其他.NET版本,有更多评论,都有类似的问题)[编辑:]即使是故意添加一个错误的PTR记录也不会使我的测试机器上出现问题

[编辑2:]发生错误的唯一原因是断开网络适配器,从而使DNS服务器不可用,即使正向解析仍然因缓存而起作用。

所以,我的问题是:

  1. 在哪些情况下GetHostEntry抛出此特定错误?
  2. 它使用哪种分辨率方法?如果我没有弄错,它使用非托管WinSock函数getnameinfo(http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx),:“名称解析可以通过域名系统(DNS),本地主机文件,或其他命名机制”。
  3. 任何想法为什么突然失败的机器在其他域(但不是在同一域的机器)?

感谢和问候, cun83

+0

您是否在本地计算机上“ipconfig/flushdns”并在修改了PTR记录后重新启动DNS服务器?您可能仍然在使用缓存的结果 – 2011-02-04 16:16:25

回答

5

我个人一直使用Dns.GetHostAddresses。它总是给我一个可靠的结果。

关于为什么Dns.GetHostEntry给你指定的错误,我认为这是由于DnsGetHostEntry在返回你的IP地址之前会尝试进行反向DNS查找。如果反向DNS查找失败,它会给你“没有这样的主机是已知的”。

据我所知,Dns.GetHostAddresses只是返回IP地址。