.NET将DNS永久缓存在服务器2008中
我遇到了一个问题:对于给定的CNAME,我的.NET web请求总是命中相同的IP。CNAME绑定到多个IP地址,并且每当DNS查找发生时(通过运行nslookup确认),这些IP地址将以随机顺序返回 我编写了一个简单的应用程序来测试这一点:.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")
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报告,但他们没有错误报告门户:(