2011-08-23 70 views
4

我有一个使用WebRequest访问http站点的程序。 如果我启动该程序执行一些webRequests然后改变我的机器的DNS设置,程序将不会改变DNS的服务器DNS程序运行时更改的设置

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服务的伎俩。虽然

+1

如果使用Dns.Resolve(hostname),会发生什么情况?你有旧的或新的价值吗? –

+0

这是令人惊讶的。我期待.NET依靠操作系统来执行DNS解析/缓存。 – lahsrah

+0

@Philipp这是我的下一步。在我的webrequests中添加dns调试 – svrist

回答

2

在内部,每个服务器都被ServicePoint类抽象出来。所以,一旦你创建了一个ServicePoint,无论是明确的还是隐含的,它都不会改变。

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

你可以尝试设置

HttpWebRequest.KeepAlive =假

HttpWebRequest.ConnectionGroupName =的String.Format( “连接 - {0}”, + +指数);

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

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

相关问题