¿Es seguro un IWebProxy de .NET compartido entre solicitudes simultáneas?
Distinga el contrato de simultaneidad de una implementación de IWebProxy de las demoras causadas por el descubrimiento automático de proxy.
IWebProxy describe una directiva de proxy. No concede a todas las implementaciones las mismas garantías de simultaneidad. Antes de compartir una instancia entre tareas de trabajo, identifique su implementación concreta y el entorno de ejecución al que pertenece.
La interfaz expone consultas de ruta dependientes del destino y credenciales. Una implementación personalizada puede consultar una dirección fija, un estado mutable o una configuración automática. Esas elecciones afectan tanto a la seguridad como al rendimiento.
Mantenga los cambios de configuración fuera del procesamiento de solicitudes
Evite usar un objeto de proxy compartido como borrador: cambiar su dirección o sus credenciales para el trabajo A mientras el trabajo B selecciona una ruta vuelve ambiguo el propietario. Configure una directiva antes de entregarla al cliente. Para cargas de trabajo con distintas cuentas o extremos de proxy, use configuraciones de cliente con propiedad separada.
La documentación histórica de WebProxy no ofrecía garantía de seguridad de subprocesos para los miembros de instancia. Aplique ese contrato a la implementación correspondiente. Si se requiere sincronización, cada lector y escritor deben participar; un bloqueo de envoltura no puede coordinar a los llamadores que usan el objeto original directamente.
Una pausa prolongada en GetProxy puede implicar en cambio descubrimiento o evaluación de PAC. Microsoft documenta el descubrimiento bloqueante para WinHTTP; esa explicación se aplica cuando el cliente usa ese backend. Mida la búsqueda de ruta por separado del tiempo de conexión y respuesta. Serializar una búsqueda lenta solo puede crear una cola.
Un extremo fijo puede eliminar el descubrimiento cuando se pretende una ruta fija. Capturar un único URI de una directiva de sistema cambiante también descarta sus decisiones futuras. Conserve esa distinción al mantener código heredado; use HttpClient y su configuración de controlador compatible para trabajo HTTP nuevo.