Caching 重置C#和#x2B中的DNS缓存;单声道

Caching 重置C#和#x2B中的DNS缓存;单声道,caching,dns,mono,Caching,Dns,Mono,我正在用Ubuntu中的C#+Mono开发一个软件,它利用了WebRequest或Dns等网络类。在开发阶段,我使用代码连接到本地Web服务器192.168.1.101,过了一段时间,我不得不将其移动到102.168.1.20,并使用本地DNS服务器提供所述IPs可读名称(模拟真实场景)。但是现在,无论我做什么,我都无法用我的C代码连接到新服务器!以下是事实: $ping myurl.local=>192.168.1.20 $nslookup myurl.local=>192.168.1.20

我正在用Ubuntu中的C#+Mono开发一个软件,它利用了
WebRequest
Dns
等网络类。在开发阶段,我使用代码连接到本地Web服务器
192.168.1.101
,过了一段时间,我不得不将其移动到
102.168.1.20
,并使用本地DNS服务器提供所述IPs可读名称(模拟真实场景)。但是现在,无论我做什么,我都无法用我的C代码连接到新服务器!以下是事实:

  • $ping myurl.local
    =>192.168.1.20

  • $nslookup myurl.local
    =>192.168.1.20

  • 来自我的代码的日志:
    Dns.GetHostAddresses(“myurl.local”)[0].ToString()
    =>192.168.1.101

在我看来,Mono已经缓存了以前的DNS解析结果,它不会放弃它们。所以我在互联网上搜索,找到了。它与我的问题相同,但在Windows和.Net中,它也有一个解决方案。不幸的是,它的解决方案不适用于我的,因为
ServicePointManager.dnsrefreshttimeout
!最糟糕的是,即使我重新启动软件和/或硬件,缓存仍然是持久的,因此我无法继续开发

所以我想知道除了使用
DnsRefreshTimeout
,是否还有其他方法可以重置Mono的缓存?即使是手动解决方案现在也可以(我可以在shell中做一些事情,比如删除文件!)

我正在使用Ubuntu 12.04和Mono 3.2.3

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


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

作为一种解决方法,手动请求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/");

大家好,最新的mono alpha版本(mono 4.3.2,可在此处获得:)现在支持ServicePointManager.DnsRefreshTimeout

我想你被误解了。Ping解析为新的IP地址,而不是旧的IP地址。然后您在问题中编写了误导性的文本,请参阅
Ping myurl.local=>192.168.1.20
,这是旧的IPMisunderstanding,192.168.1.20是新的IP!谢谢,@geogrepiva在另一篇文章中已经提出了拉取请求。你认为我应该再发一封吗?似乎有人听从了我的建议,提出了一个解决方案:你解决了这个问题了吗?我似乎也有类似的单核细胞增多症的问题…@DavidDuffett,你可以看到,我有这个问题已经有一段时间了。当时我无法修复它,不得不使用新的DNS!这似乎是一个误解,问题是Mono将域解析为一个旧的IP地址。似乎某个域的IP地址被缓存在某个地方,即使该域现在指向另一个IP,但Mono仍然将其解析为相同的旧IP地址。因此,您的解决方案将面临与stem相同的命运,IP不正确。您确定吗?Mono缓存旧IP,但仅在通过HttpWebRequest解析时在内部缓存。不是通过Dns.GetHostEntry。该DNS请求未被缓存。