Настройки DNS изменены во время работы программы - PullRequest
5 голосов
/ 24 августа 2011

У меня есть программа, которая использует WebRequest для доступа к http-сайтам. Если я запускаю программу, выполняю некоторые веб-запросы, а затем изменяю настройки 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?

РЕДАКТИРОВАТЬ: Кажется, что перезапуск службы Windows для кэша DnsClient делает свое дело. Довольно хардкор, хотя

1 Ответ

2 голосов
/ 29 августа 2011

Внутри каждого сервера абстрагируется классом ServicePoint.Таким образом, после создания ServicePoint, явно или неявно, он не изменяется.

Кроме того, он может кэшировать предыдущее соединение и использовать его для последующего запроса.

Выможно попробовать установить

HttpWebRequest.KeepAlive = false

и

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

и посмотрите, заставляет ли это .NET каждый раз создавать новое соединение.

Если это не работает, попробуйте реализовать метод BindIPEndPointDelegate () иприкрепив его к веб-запросу.Затем для каждого запроса .NET будет вызывать этот делегат для разрешения IP-адреса конечной точки, и вы можете выполнить DNS.Resolve () в этом делегате.

...