Dns.GetHostEntry错误条件和解决方法

cun*_*n83 13 .net vb.net dns active-directory resolve

我有一个关于Dns.GetHostEntry的非常具体的问题:

服务使用Dns.GetHostEntry使用主机的名称检索主机的所有IP地址.这一直很好.在特定客户处,Dns.GetHostEntry在查询特定主机时抛出"无此主机已知"错误.只有在尝试解析与安装该服务的计算机不同的域上的主机时,才会出现此问题.该服务已经工作了一段时间,但最近停止工作,抛出"没有这样的主机已知"错误(遗憾的是,没有堆栈跟踪可用).Nslookup工作,但没有问题.有问题的服务是用VB.NET编写的,目标是.NET Framwork 2.0.

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

[EDIT2:]唯一导致错误的是断开网络适配器,从而使DNS服务器不可用,即使前向解析由于缓存仍然有效.

所以,我的问题是:

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

谢谢和最好的问候,cun83

Har*_*wok 7

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

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

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