我在更改 HOSTS 文件时使用 .NET WebRequest。我发现 System.Net 不遵守这些更改 - 我怎样才能让它这样做?
我有许多服务器在单个主机名后面进行负载平衡,比方说“example.com”。我想单独定位其中的几个,因此我的程序将在向 example.com 发送请求之前在 HOSTS 文件中硬编码机器特定的 IP 地址:
163.56.0.34 example.com
对于第一个服务器和第一个请求,这工作得很好。然后我的程序再次更改HOSTS文件:
163.56.0.48 example.com
我创建了一个新的 HttpWebRequest。当我发送这个 IP 地址时,我可以在 NETMON 中观察到它发送到第一个 IP 地址 (163.56.0.34),而不是预期的第二个 IP 地址。
使用断点和调试跟踪,我已经验证每次都将正确的值写入 HOSTS 文件。当我尝试从浏览器或其他程序访问 example.com 时,它确实遵循 HOSTS 文件并转到第二个 IP 地址。
使用 NETMON,我已经验证请求是否直接发送到显示的 IP 地址;没有 HTTP 代理。
由于其他所有内容都遵循更改后的 HOSTS 文件,因此我强烈怀疑 System.Net 基础架构已缓存 example.com 的 DNS 主机 IP 关联。但是,我找不到任何关于此缓存的参考,并且不知道如何刷新或关闭它。
我欢迎有关处理缓存的说明、有关可能导致这些症状的其他原因的建议或其他建议的可能有用的诊断步骤。
我终于从 MSDN 中找到了解决这个问题的晦涩命令:
ServicePointManager.DnsRefreshTimeout = 0;
当我解开之前尝试过的所有奇怪的事情时,我发现了除了上述设置之外我还需要的另一种设置;在请求对象上,关闭 keep-alive:
request.KeepAlive = false;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)