我有一个关于 Dns.GetHostEntry 的非常具体的问题:
服务使用 Dns.GetHostEntry 检索主机的所有 IP 地址,使用主机的名称。这一直运作良好。在特定客户处,Dns.GetHostEntry 在查询特定主机时会抛出“no such host is known”错误。仅当尝试解析与安装服务的计算机位于不同域中的主机时才会出现此问题。该服务已经工作了很长一段时间,但最近停止工作,抛出“no such host is known”错误(遗憾的是,没有可用的堆栈跟踪)。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 版本有更多评论,都有类似的问题)。[编辑:] 甚至故意添加错误PTR 记录不会使我的测试机器上出现问题。
[EDIT2:] 唯一导致错误出现的是断开网络适配器,从而使 DNS 服务器不可用,即使由于缓存,前向解析仍然有效。
所以,我的问题是:
- GetHostEntry 在什么情况下会抛出此特定错误?
- 它使用哪些解析方法?如果我没记错的话,它使用非托管 WinSock 函数 getnameinfo ( http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx ),“名称解析可以由域名系统 (DNS)、本地主机文件或其他命名机制”。
- 任何想法为什么这对于另一个域上的机器突然失败(但不是同一域上的机器)?
谢谢和最好的问候, cun83