我有一个与Dns.GetHostEntry相关的非常具体的问题:
一个服务使用Dns.GetHostEntry通过主机名检索主机的所有IP地址。这一直运行得很好。在某个特定的客户端上,当查询特定主机时,Dns.GetHostEntry会抛出“未知的无此主机”错误。只有当尝试解析位于与安装该服务的计算机不同域上的主机时才会出现该问题。该服务已经工作了一段时间,但最近停止工作,抛出“未知的无此主机”错误(遗憾的是,没有堆栈跟踪可用)。Nslookup可以正常工作,没有问题。所涉及的服务是使用VB.NET编写的,目标为.NET Framework 2.0。
.NET 3.0的MSDN条目中的注释(http://msdn.microsoft.com/en-us/library/ms143998(v=VS.85).aspx)表明主机的反向DNS条目可能存在问题,但是我无法在测试网络上重现该问题,即使删除了所有反向查找区域(其他.NET版本有类似问题的更多注释)。[编辑:]即使故意添加错误的PTR记录,也不会在我的测试机器上发生此问题。
[编辑2:]导致错误发生的唯一原因是断开网络适配器,从而使DNS服务器不可用,尽管由于缓存,前向解析仍然有效。
所以,我的问题是:
- 在什么条件下会引发Dns.GetHostEntry抛出此特定错误?
- 它使用哪些解析方法?如果我没记错的话,它使用未管理的WinSock函数getnameinfo (http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx),:"名称解析可以通过域名系统(DNS),本地主机文件或其他命名机制进行"。
- 有什么想法为什么这对于另一个域上的机器突然失败了(但对于同一域上的机器则没有)?
谢谢和最好的问候, cun83