Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET将DNS永久缓存在服务器2008中_.net_Dns_Windows Server 2008_.net 4.5 - Fatal编程技术网

.NET将DNS永久缓存在服务器2008中

.NET将DNS永久缓存在服务器2008中,.net,dns,windows-server-2008,.net-4.5,.net,Dns,Windows Server 2008,.net 4.5,我遇到了一个问题:对于给定的CNAME,我的.NET web请求总是命中相同的IP。CNAME绑定到多个IP地址,并且每当DNS查找发生时(通过运行nslookup确认),这些IP地址将以随机顺序返回 我编写了一个简单的应用程序来测试这一点: public void TestDNS() { while (true) { var ipAddress = Dns.GetHostAddresses("mywebsite.com")

我遇到了一个问题:对于给定的CNAME,我的.NET web请求总是命中相同的IP。CNAME绑定到多个IP地址,并且每当DNS查找发生时(通过运行nslookup确认),这些IP地址将以随机顺序返回

我编写了一个简单的应用程序来测试这一点:

    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数据中心、Server 2008 R2数据中心、Server 2012、Windows 7和Windows 8上运行了此应用程序。所有机器都有最新的更新和可用的服务包

唯一出现故障的机器是Server 2008。每隔一台机器大约每分钟切换一次IP地址(TTL为1分钟)。Server 2008从不切换(运行了一个多小时)

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

我尝试了本文件中列出的项目,但没有成功


有什么想法吗?

作为解决办法,ping报告是否与此相同

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


希望这有帮助

您是否在所有计算机上运行相同的.Net环境,即您的代码编译到相同的目标(x86或x64)和相同的.Net framework 2.0或3.5或4.0

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

返回值

类型:System.Net.IPAddress[]

IPAddress类型的数组,用于保存主机的IP地址 由hostNameOrAddress参数指定的

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

有关更多详细信息,请参阅。

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


HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters

能否让DNS服务器为每次呼叫返回完全不同的IP地址集?这将告诉您项目是否正在缓存,或者运行时是否出于某种原因正在对返回的值进行排序。我尝试在.NET应用程序运行后更改DNS记录,但没有任何更改。它似乎没有接收到任何DNS更改(即永久缓存)。我发现唯一的帮助是更新hosts文件。如果我这样做,它会更新正在运行的.NET应用程序中的DNS。方法GetHostAddresses()返回IPAddress类型的数组。看看我的答案。我也看到了类似的问题。我知道这是一个老问题,但服务器是否托管在云中(如果是,是哪一个)?@TheCloudlessky祝你好运。如果您没有看到下面的内容,我使用这个应用程序解决了我们服务器上的问题:谢谢。我现在所做的解决方法是通过.NET进程命令调用wslookup并更新hosts文件。这是一个黑客,但它很简单,它的工作。最终,我将升级到服务器2012,它没有这个问题。下面是代码,它基本上采用一个目标url,并将IP分配给主机文件中您想要的任意多个主机名。方法GetHostAddresses()返回IPAddress类型的数组;看我的答案。是的。我将exe和DLL复制并粘贴到不同的机器上。每个操作系统都是64位的。我认为这并不意味着所有操作系统都有相同的框架。我认为这是框架集成的.Net framework中的一个错误,应该向Microsoft报告,但他们没有错误报告门户:(