我正在使用 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 。
答案 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/");