【发布时间】:2011-04-09 08:45:58
【问题描述】:
我有一个 ASP.NET 应用程序,我经常用它来通过HttpWebRequest 读取网页的内容。远程地址没有问题,我的应用程序一直运行良好。
虽然我没有进行任何更改,但有时(大约每天一次)我会收到此错误:
the remote name could not be resolved.
为什么以前解析的 DNS 名称有时无法解析?
【问题讨论】:
标签: asp.net httpwebrequest dns
我有一个 ASP.NET 应用程序,我经常用它来通过HttpWebRequest 读取网页的内容。远程地址没有问题,我的应用程序一直运行良好。
虽然我没有进行任何更改,但有时(大约每天一次)我会收到此错误:
the remote name could not be resolved.
为什么以前解析的 DNS 名称有时无法解析?
【问题讨论】:
标签: asp.net httpwebrequest dns
这种间歇性的性质将非常难以解决,并且需要更改配置而不是代码解决方案。 (提示:阅读所有内容;)
我猜远程服务器的 DNS 设置为经常过期。可能每天,甚至可能每 12 小时左右一次。这是 TTL(生存时间)设置。如果管理员需要能够将站点快速移动到新服务器,他们有时会将其设置为人为的低级别。
您可以通过转到命令提示符并运行来确定它的过期频率:
nslookup
set debug
www.theserverdomain.com
在此顶部将显示“授权记录:”的部分,其下方有一个显示“ttl”的项目。
现在,(我在这里做出有根据的猜测),当您查询 DNS 服务器以解析该主机名时,您的服务器可能会缓存该值。
但是,一旦过期,您的服务器将不得不联系上游的另一台服务器以获取 IP 地址解析,称为 DNS 转发。如果您和远程服务器之间有很多跃点,或者如果站点之间的 DNS 服务器之一过载,那么它可能会超时并发回您收到的消息。
如果这是真的,那么您唯一能做的就是在您的 Web 服务器主机文件中硬编码 DNS 和 IP 地址组合。这通常位于C:\Windows\System32\drivers\etc,是一个名为“hosts”的文件。有一个关于如何在文件本身中正确编辑它的示例。
在该文件中创建主机映射后,您的网络服务器将不再需要联系 DNS 服务器来执行名称解析,并且 TTL 设置为什么也没有关系。
这里唯一的危险是如果他们将网站移动到一个新的 IP 地址。此时您可以简单地再次更新您的主机文件...
【讨论】:
TTL 设置为 2 天。现在,是否有可能以某种方式将我的小缓存放在我的应用程序中?我的意思是,解析 DNS 并将它们保存在内存中,直到下一次卸载/加载应用程序域。我需要一个与网站管理员交互最少的解决方案(对于我来说,主机解决方案仍然足够好)。
我首先要检查的是 DNS 是否不再正确配置或出现故障。
尝试(从 Windows 命令行)
nslookup MyDnsNameHere
看看你是否得到了你想要的IP。
【讨论】: