单声道DNS刷新超时

时间:2013-03-26 17:07:09

标签: c# dns mono xamarin system.net

虽然当前Mono项目的ServicePointManager类在其接口中启用了DnsRefreshTimeout属性。相关财产未实施。

示例电话:

ServicePointManager.DnsRefreshTimeout = 10*60*1000; // 10 minutes

运行我的应用程序时,我在运行时获得了下一个异常:

The requested feature is not implemented. (System.NotImplementedException) at System.Net.ServicePointManager.set_DnsRefreshTimeout (Int32 value) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/ServicePointManager.cs:213

实际执行情况如下:

[MonoTODO]
public static int DnsRefreshTimeout
{
    get {
        throw GetMustImplement ();
    }
    set {
        throw GetMustImplement ();
    }
}

我认为我没有足够的知识来实现​​这个功能,因为我自上个月开始开发C#Mono应用程序。

那么,有人知道一个解决方法吗?或者我是否应该为Mono项目团队申请功能实施?

我正在开发一个Xamarin跨平台应用程序,我真的需要将DNS解析缓存至少10分钟。

P.S。 https://bugzilla.xamarin.com/show_bug.cgi?id=11424

要求的功能

1 个答案:

答案 0 :(得分:2)

我没有修复,但我有一个解决方法:

var request = (HttpWebRequest)WebRequest.Create("http://www.google.com/");

// Disable KeepAlive so we don't reuse  connections
request.KeepAlive = false;

// Clear out the cached host entry
var hostField     = typeof(ServicePoint).GetField("host", BindingFlags.NonPublic | BindingFlags.Instance);
var hostFieldLock = typeof(ServicePoint).GetField("hostE", BindingFlags.NonPublic | BindingFlags.Instance);
var hostLock      = hostFieldLock.GetValue(request.ServicePoint);
lock (hostLock)
    hostField.SetValue(request.ServicePoint, null);

这是基于当前版本的ServicePoint for mono,您可以在2015年3月查看here