我在更改 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。当我发送这个时,我可以在 NETMON 中观察到它转到第一个 IP 地址 (163.56.0.34) 而不是预期的第二个。
使用断点和调试跟踪,我验证了每次都将正确的值写入 HOSTS 文件。当我尝试从浏览器或其他程序访问 example.com 时,它确实尊重 HOSTS 文件并转到第二个 IP 地址。
使用 NETMON,我已经验证请求直接发送到显示的 IP 地址;没有 HTTP 代理。
由于其他所有内容都遵循更改后的 HOSTS 文件,因此我强烈怀疑 System.Net 基础架构已缓存了 example.com 的 DNS 主机-IP 关联。但是,我找不到对此缓存的引用,并且不知道无法刷新或关闭它。
我欢迎有关处理缓存的说明、有关可能导致这些症状的其他原因的建议,或其他可能有用的建议诊断步骤。