7

我遇到了一个问题,即我的 .NET Web 请求总是针对给定的 CNAME 访问相同的 IP。CNAME 绑定到多个 IP 地址,每次发生 DNS 查找时,这些 IP 地址都会以随机顺序返回(通过运行 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 上运行了这个应用程序。所有机器都有最新的更新和可用的服务包。

唯一失败的机器是 Server 2008。每台其他机器大约每分钟切换一次 IP 地址(TTL 为 1 分钟)。Server 2008 从不切换(运行了一个多小时)。

需要明确的是,在机器上运行 nslookup 和其他工具似乎表明 DNS 正在返回我所期望的内容。此问题似乎特定于 Server 2008 上的 .NET。

我已经尝试过这个相关答案中列出的项目,但没有成功。

有任何想法吗?

4

4 回答 4

3

作为解决方法,ping 报告是否存在相同问题?

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

如果您愿意接受变通办法,另一种可能的解决方案是搜索解析主机名的第 3 方库/代码或通过 [System.Diagnostics.Process();] 调用命令行。

希望这会有所帮助。

于 2013-03-24T10:48:52.663 回答
3

方法GetHostAddresses()返回一个类型为 的数组IPAddress

返回值

类型:System.Net.IPAddress[]

一个 IPAddress 类型的数组,其中包含由 hostNameOrAddress 参数指定的主机的 IP 地址。

将您的更改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 回答
1

您正在进行递归查询。如果您不希望 DNS 服务器缓存任何递归查询,请创建值 0x0 的新 DWORD“MaxCacheTTL”

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 回答