c# – 如何清除System.Net客户端DNS缓存?

更改我的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)而不是预期的第二个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;
http://stackoverflow.com/questions/7277582/how-do-i-clear-system-net-client-dns-cache

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 如何清除System.Net客户端DNS缓存?