7

.NET Web リクエストが特定の CNAME に対して常に同じ IP にヒットするという問題があります。CNAME は複数の IP アドレスにバインドされており、これらの IP アドレスは、DNS ルックアップが発生するたびにランダムな順序で返されます (nslookup の実行によって確認されます)。

これをテストするための簡単なアプリを作成しました。

    public void TestDNS()
    {
        while (true)
        {
            var ipAddress = Dns.GetHostAddresses("mywebsite.com").First().ToString();

            Console.WriteLine(string.Format("Current: '{0}' at: '{1}'", ipAddress, DateTime.Now.ToLongTimeString()));

            Thread.Sleep(1000);
        }
    }

このアプリを Server 2008 Datacenter、Server 2008 R2 Datacenter、Server 2012、Windows 7、および Windows 8 で実行しました。すべてのマシンで最新の更新プログラムと Service Pack が利用可能でした。

失敗する唯一のマシンは Server 2008 です。他のすべてのマシンは、約 1 分に 1 回 IP アドレスを切り替えます (TTL は 1 分です)。Server 2008 は切り替わることはありません (1 時間以上実行)。

明確にするために、マシンで nslookup やその他のツールを実行すると、DNS が期待どおりの結果を返していることが示されているようです。この問題は、Server 2008 上の .NET に固有のもののようです。

この関連する回答にリストされている項目を試しましたが、成功しませんでした。

何か案は?

4

4 に答える 4

3

メソッドGetHostAddresses()は 型の配列を返しますIPAddress

戻り値

タイプ: System.Net.IPAddress[]

hostNameOrAddress パラメーターで指定されたホストの IP アドレスを保持するタイプ IPAddress の配列。

varを IPAddress 配列に変更します。次に例を示します。

public static void DoGetHostAddresses(string hostname)
{
    IPAddress[] ips;

    ips = Dns.GetHostAddresses(hostname);

    Console.WriteLine("GetHostAddresses({0}) returns:", hostname);

    foreach (IPAddress ip in ips)
    {
        Console.WriteLine("    {0}", ip);
    }
}

詳しくはこちらのページをご覧ください。

于 2013-03-25T13:45:01.243 に答える
3

回避策として、ping レポートも同じ問題ですか?

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx

回避策を受け入れる場合、別の可能な解決策は、ホスト名を解決するサードパーティのライブラリ/コードを検索するか、[System.Diagnostics.Process();] を介してコマンド ラインを呼び出すことです。

それが助けになることを願っています。

于 2013-03-24T10:48:52.663 に答える
1

再帰クエリを作成しています。DNS サーバーに再帰クエリをキャッシュさせたくない場合は、新しい DWORD "MaxCacheTTL" を値 0x0 で作成します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters

于 2013-03-25T14:25:08.227 に答える
0

すべてのマシンで同じ .Net 環境を実行していますか。つまり、コードは同じターゲット (x86 または x64) および同じ .Net フレームワーク 2.0 または 3.5 または 4.0 にコンパイルされていますか?

于 2013-03-25T11:37:43.143 に答える