responsibility pattern observer example dofactory c# .net proxy

c# - pattern - Detección de proxy.NET



proxy c# example (2)

Encontré la solución.

.NET utiliza el "Servicio de descubrimiento automático 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

Encontré esto siguiendo la sugerencia de James Kovacs de adjuntar el depurador. 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, intenté depurar de nuevo, y después de varias horas encontré 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.

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

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 a continuación 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 siguientes consejos 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
  • Parece que .NET se "atasca" 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, solo Vista, 2003 y Windows 7.
  • La codificación de los servidores proxy en IE SIEMPRE funciona
  • El tiempo siempre resuelve el problema: si dejo la computadora unos 20 o 30 minutos y vuelvo, .NET recupera la configuración de proxy correcta, como si hubiera caducado una secuencia de comandos de PAC en caché.

Tuve el mismo problema y logré / establecí 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>"