在C#+ Mono中重置DNS缓存

时间:2014-01-12 09:24:18

标签: caching dns mono

我正在使用 Ubuntu 中的 C# + Mono 开发一个软件,该软件使用WebRequest或{等网络类{1}}。在开发阶段,我使用我的代码连接到本地网络服务器Dns,过了一段时间我不得不将其移动到192.168.1.101,我使用本地DNS服务器给出提到的IP可读名称(到模拟现实世界的场景)。但现在,无论我做什么,我都无法使用C#代码连接到新服务器!以下是它们的内容:

  • 102.168.1.20 => 192.168.1.20

  • $ ping myurl.local => 192.168.1.20

  • 从我的代码中记录:$ nslookup myurl.local => 192.168.1.101

在我看来,Mono已经缓存了DNS之前解决的结果,它不会放弃它们。所以我搜索了互联网,然后找到了this question。它与我的问题相同,但在Windows和.Net中也是一个解决方案。不幸的是,由于Dns.GetHostAddresses("myurl.local")[0].ToString() is not implemented in Mono,其解决方案不适用于我的解决方案!最糟糕的是,即使我重新启动软件和/或硬件,缓存也是持久的,因此我无法继续进行开发!

所以我想知道除了使用ServicePointManager.DnsRefreshTimeout之外,我是否可以重置Mono的缓存?即使是手动解决方案也可以做到(我可以在shell中做些什么!?就像删除文件一样!?)。

我正在使用 Ubuntu 12.04 Mono 3.2.3

3 个答案:

答案 0 :(得分:1)

大家好消息,最新的单声道alpha版本(单声道4.3.2,此处可用:http://www.mono-project.com/download/alpha/)现在支持ServicePointManager.DnsRefreshTimeout!

答案 1 :(得分:0)

  

不幸的是,它的解决方案不适用于我的,因为ServicePointManager.DnsRefreshTimeout未在Mono中实现!

欢迎来到开源世界:)如果您不喜欢或希望改进,请发送拉取请求。

答案 2 :(得分:0)

作为解决方法,请手动请求DNS并直接连接到IP,例如:

// Get hostname IPs manually (this may fail)
IPAddress[] ips = Dns.GetHostEntry('api.example.com').AddressList;

// New web request, initialize with endpoint URL
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://" + ips[0].ToString() + "/api/");