Определение прокси-сервера .NET
У меня возникла проблема с .NET, определяющим настройки прокси-сервера, настроенные через Internet Explorer.
Я пишу клиентское приложение, которое поддерживает прокси, и для тестирования я настроил массив из 9 серверов squid для поддержки различных методов проверки подлинности для HTTP и HTTP. У меня есть script, который обновляет IE до любой конфигурации, которую я выбираю (какой прокси, обнаружение через "Авто", PAC или жесткий код).
Я попытался использовать 3 метода ниже, чтобы определить конфигурацию IE через .NET. В частности, я заметил, что .NET собирает неправильный набор прокси-серверов. IE имеет правильные настройки, и если я просматриваю веб-страницы с помощью IE, я вижу, что я нахожусь на правильных серверах через wirehark.
WebRequest.GetSystemWebProxy().GetProxy(destination);
GlobalProxySelection.Select.GetProxy(destination);
WebRequest.DefaultWebProxy
Ниже приведены следующие советы:
- My script устанавливает файл PAC на веб-сервере и обновляет конфигурацию в IE, затем очищает кеш IE
- .NET, похоже, "застрял" в определенной конфигурации прокси, и мне нужно установить еще одну конфигурацию для .NET, чтобы понять, что произошли изменения. Иногда кажется, что выбирается какой-то случайный набор серверов (я уверен, что они не случайные, просто набор серверов, которые я использовал один раз, и находятся в каком-то кэшированном файле PAC или что-то в этом роде). Как и в, я проверю прокси для адресата "https://www.secure.com", и у меня может быть настроен IE и, следовательно, вы получите "http://squidserver: 18", и вместо этого он вернет "http://squidserver: 28" (порт 18 запускает NTLM, 28 работает без аутентификации). Все серверы squid работают.
- Это не проблема для XP, только Vista, 2003 и Windows 7.
- Hardcoding прокси-серверов в IE ALWAYS работает
- Время всегда решает проблему - если я покину компьютер около 20 или 30 минут и вернусь,.NET подберет правильные настройки прокси-сервера, как если бы кешированный PAC script истек.
Ответы
Ответ 1
Я нашел решение.
.NET использует "службу автоматического обнаружения веб-прокси-сервера WinHttp" для выполнения PAC script и, вероятно, кэширует результаты. Просто останавливать и перезапускать эту службу делает трюк. Следующая команда делает это для меня.
NET STOP WinHttpAutoProxySvc
NET START WinHttpAutoProxySvc
http://wiki.blackviper.com/wiki/WinHTTP_Web_Proxy_Auto-Discovery_Service
Я нашел это, следуя предложению Джеймса Ковача о прикреплении отладчика. Я уже просмотрел код и сделал неудачную попытку подключить отладчик, прежде чем я когда-нибудь разместил этот вопрос, но не смог точно определить, что происходит. Завершив опции, я снова попробовал отладку и через несколько часов нашел следующий комментарий в _AutoPWebProxyScriptEngine.cs в строке 76, который привел меня к этому открытию
// In Win2003 winhttp added a Windows Service handling the auto-proxy discovery. In XP using winhttp
// APIs will load, compile and execute the wpad file in-process. This will also load COM, since
// WinHttp requires COM to compile the file. For these reasons, we don't use WinHttp on XP, but
// only on newer OS versions where the "WinHTTP Web Proxy Auto-Discovery Service" exists.
Ответ 2
У меня была такая же проблема, и мне удалось получить/установить настройку прокси-сервера в реестре:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyServer"="<your proxy IP address>:8080"
"ProxyEnable"=dword:00000001
"ProxyOverride"="<local>"