2010-12-13 22 views
13

Tengo un problema con .NET que detecta la configuración de proxy configurada a través de Internet Explorer.Detección de proxy .NET

Estoy escribiendo una aplicación cliente que admite proxies, y para probar configuré una matriz de 9 servidores squid para admitir varios métodos de autenticación para HTTP y HTTP. Tengo un script que actualiza IE a la configuración que elijo (qué proxy, detección a través de "Auto", PAC o código duro).

He intentado los 3 métodos siguientes para detectar la configuración de IE a través de .NET. En ocasiones, noto que .NET recoge el conjunto incorrecto de servidores proxy. IE tiene la configuración correcta, y si navego por la web con IE, puedo ver que estoy llegando a los servidores correctos a través de wireshark.

WebRequest.GetSystemWebProxy().GetProxy(destination);

GlobalProxySelection.Select.GetProxy(destination);

WebRequest.DefaultWebProxy

Estos son los consejos siguientes que tengo:

  • Mi secuencia de comandos establece un archivo PAC en un servidor web, y actualiza la configuración en IE, luego borra la caché de IE
  • .NET parece "atascado" en una determinada configuración de proxy, y tengo que establecer otra configuración para .NET para darse cuenta de que hubo un cambio. Ocasionalmente, parece elegir un conjunto aleatorio de servidores (estoy seguro de que no son aleatorios, solo un conjunto de servidores que utilicé una vez y están en algún archivo PAC en caché o algo así). Como en, verifico el proxy para el destino "https://www.secure.com" y puedo configurar IE para y así esperar obtener "http: // squidserver: 18" y en su lugar devolverá "http : // squidserver: 28 "(el puerto 18 ejecuta NTLM, 28 ejecuciones sin autenticación). Todos los servidores de calamar funcionan.
  • Esto no parece ser un problema en XP, solamente Vista, 2003 y Windows 7.
  • hardcoding los servidores proxy en el IE funciona SIEMPRE
  • El tiempo siempre soluciona el problema - si dejo la computadora sin usar durante De 20 a 30 minutos y regresa, .NET recupera la configuración de proxy correcta, como si un script de PAC almacenado caducara.
+0

¿No puedes usar UseDefaultProy? – Aliostad

+0

UseDefaultProxy? No se puede encontrar nada en línea. – Dlongnecker

+0

¿Esto ayuda en absoluto? -> http://stackoverflow.com/questions/1023635/detect-proxy-settings-of-default-web-browser-c/1023978#1023978 – adrianbanks

Respuesta

4

he encontrado la solución.

.NET utiliza el "Servicio de descubrimiento automático de proxy web WinHttp" para realizar la ejecución del script PAC, y probablemente almacena en caché los resultados. Simplemente detener y reiniciar este servicio hace el truco. La siguiente línea de comando hace esto por mí.

NET STOP WinHttpAutoProxySvc 
NET START WinHttpAutoProxySvc 

http://wiki.blackviper.com/wiki/WinHTTP_Web_Proxy_Auto-Discovery_Service

yo encontramos este siguiendo la sugerencia de adjuntar el depurador James Kovacs. Ya había reflexionado a través del código e hice un intento fallido de adjuntar un depurador antes de publicar la pregunta, pero no pude descifrar exactamente qué estaba sucediendo. Quedando sin opciones, he intentado depurar otra vez, y después de varias horas encontraron el siguiente comentario en _AutoPWebProxyScriptEngine.cs en la línea 76 que me llevó a este descubrimiento

 // 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. 
+0

El enlace está muerto ahora. Encontré este enlace que se parece a la misma información, pero no voy a editar en la pregunta ya que no estoy 100% seguro de si esto es realmente lo mismo. http://www.blackviper.com/windows-services/winhttp-web-proxy-auto-discovery-service/ –

0

que tenían el mismo problema y me succeded obtener/establecer la configuración del proxy en el registro:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] 
"ProxyServer"="<your proxy IP address>:8080" 
"ProxyEnable"=dword:00000001 
"ProxyOverride"="<local>" 
+0

Gracias por el consejo, Radu. Lamentablemente, solo estoy buscando detectar configuraciones de proxy, no establecerlas, y las configuraciones de registro alrededor de esta clave no ayudan si IE está configurado para detectar automáticamente el proxy. Y prefiero no escribir mi propio detector Proxy automático. – Dlongnecker

Cuestiones relacionadas