2009-04-14 13 views
9

¿Cómo mantengo una conexión viva en C#? No lo estoy haciendo bien. ¿Debo crear un obj de HttpWebRequest y usarlo para ir a cualquier URL que necesite? No veo una forma de visitar una url que no sea HttpWebRequest.Create static method.¿Mantiene viva una conexión http en C#?

¿Cómo puedo crear una conexión, mantenerla viva, explorar varias páginas/medios en la página y admitir proxys? (He oído proxy son fáciles y el soporte es casi estándar?) -edit- buenas respuestas. ¿Cómo solicito una segunda url?

{ 
HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create("http://google.com"); 
WebRequestObject.KeepAlive = true; 
//do stuff 
WebRequestObject.Something("http://www.google.com/intl/en_ALL/images/logo.gif"); 
} 

Respuesta

19

¿Has probado la propiedad HttpWebRequest.KeepAlive? Establece el encabezado HTTP Keep-Alive apropiado y persiste las conexiones. (Por supuesto, esto también debe ser compatible y habilitado por el servidor web remoto).

La documentación HttpWebRequest.KeepAlive en MSDN indica que se establece en cierto por defecto para HTTP1.1 conexiones, por lo que sospechan que el servidor al que está intentando ponerse en contacto no permite la persistencia de conexión.

Proxy se usa automáticamente y su configuración se toma de la configuración de su sistema (leer Internet Explorer). También es posible anular la configuración del proxy a través de la propiedad HttpWebRequest.Proxy o ajustando el archivo de configuración de la aplicación (consulte http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx).

8

Conjunto HttpWebRequest.KeepAlive propiedad True .NET se ocupará del resto. Es solo un grupo de conexión de base de datos. Funciona de manera transparente.

Puede crear una nueva conexión libremente .NET se dará cuenta de que está conectando un servidor ya conectado y lo usará. También depende de su número de Net.ServicePointManager.DefaultConnectionLimit que establecerá nuevas conexiones (si lo hace multiproceso).

+0

No parece que esto es exactamente cierto. .NET necesita ayuda para gestionar las conexiones mediante la reutilización de una instancia de HttpClient. Estoy trabajando en un problema ahora en el que hay miles de conexiones no utilizadas establecidas, porque keep-alive se usa con un tiempo de espera de conexión de -1 y se utiliza una nueva instancia de HttpClient por solicitud. Sin embargo, esto puede ser un problema con la nueva clase HttpClient. –

1

Tuve un problema similar cuando HttpWebRequest.KeepAlive = true no era suficiente para mantenerlo vivo. La conexión se quedó en sólo después me puse request.UnsafeAuthenticatedConnectionSharing = true y ServicePointManager.MaxServicePointIdleTime = 100000; // evitar 0 o valores bajos

0

Si está utilizando HTTP 1.1 no se debe utilizar mantenimiento de conexiones como el la conexión es implícitamente Keep-Alive.

La propiedad HttpWebRequest.KeepAlive se puede configurar pero si está enviando una solicitud Http 1.1, no configurará realmente el encabezado a menos que lo configure en Cerrar.

He aquí otra pregunta que tenga más información: is an HTTP/1.1 request implicitly keep-alive by default?

Cuestiones relacionadas