【问题标题】:Dns Settings changed while program running程序运行时更改了 DNS 设置
【发布时间】:2011-08-23 21:13:20
【问题描述】:

我有一个使用 WebRequest 访问 http 站点的程序。 如果我启动程序执行一些 webRequests 然后更改我机器的 Dns 设置,程序将不会更改 dns-servers

喜欢

 WebRequest.Create("http://www.google.com");

....将我的网络接口的 Dns 设置更改为无效或捕获门户....

 WebRequest.Create("http://www.google.com"); 
 // Still uses original dns server for dns lookup (or cache)

ipconfig flushdns 没有区别

有什么方法可以强制 WebRequest 使用实际的 dns 服务器进行 dns 查找?

编辑:似乎重新启动 DnsClient 缓存的 Windows 服务可以解决问题。虽然很硬核

【问题讨论】:

  • 如果使用 Dns.Resolve(hostname) 会发生什么?你得到旧值还是新值?
  • 这令人惊讶。我期待 .NET 依赖操作系统来进行 DNS 解析/缓存。
  • @Philipp 那是我的下一步。在我的 webrequests 周围添加 dns 调试

标签: c# httpwebrequest dns


【解决方案1】:

在内部,每个服务器都由一个 ServicePoint 类抽象出来。因此,一旦您创建了一个 ServicePoint,无论是显式还是隐式,它都不会改变。

此外,它可能正在缓存先前的连接并将其用于后续请求。

你可以试试设置

HttpWebRequest.KeepAlive = false

HttpWebRequest.ConnectionGroupName = String.Format("connection-{0}", ++索引);

看看这是否会强制 .NET 每次都创建一个新连接。

如果这不起作用,请尝试实现 BindIPEndPointDelegate() 方法并将其附加到 webrequest。然后,对于每个请求,.NET 将调用该委托来解析端点 IPAddress,您可以在该委托中执行 DNS.Resolve()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多