2

現在の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アプリケーションを開発しているという理由だけで、この機能をすべて自分で実装するための十分な知識がないと思います。

だから、誰かがこれの1つの回避策を知っていますか?または、Monoプロジェクトチームの機能の実装をリクエストしますか?

Xamarinクロスプラットフォームアプリケーションを開発していますが、DNS解決を少なくとも10分間キャッシュする必要があります。

Ps機能はhttps://bugzilla.xamarin.com/show_bug.cgi?id=11424でリクエストされました

4

1 に答える 1

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);

これは、2015年3月の時点でここで表示できるmono用のServicePointの現在のバージョンに基づいています。

于 2015-03-06T22:38:43.853 に答える