c# Cómo cambiar el tiempo de espera en un objeto WebClient .NET
Estoy tratando de descargar los datos de un cliente a mi máquina local (programáticamente) y su servidor web es muy, muy lento, lo que está causando un tiempo de espera en mi objeto WebClient
.
Aquí está mi código:
WebClient webClient = new WebClient();
webClient.Encoding = Encoding.UTF8;
webClient.DownloadFile(downloadUrl, downloadFile);
¿Hay una manera de establecer un tiempo de espera infinito en este objeto? ¿O si no puede alguien ayudarme con un ejemplo de una manera alternativa de hacer esto?
La URL funciona bien en un navegador: solo demora unos 3 minutos en aparecer.
No se pudo hacer funcionar el código w.Timeout cuando se extrajo el cable de red, simplemente no se agotó el tiempo de espera, se cambió para usar HttpWebRequest y hace el trabajo ahora.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(downloadUrl);
request.Timeout = 10000;
request.ReadWriteTimeout = 10000;
var wresp = (HttpWebResponse)request.GetResponse();
using (Stream file = File.OpenWrite(downloadFile))
{
wresp.GetResponseStream().CopyTo(file);
}
Como dice Sohnee, usar System.Net.HttpWebRequest
y establecer la propiedad Timeout
lugar de usar System.Net.WebClient
.
Sin embargo, no puede establecer un valor de tiempo de espera infinito (no se admite y al intentar hacerlo se lanzará una ArgumentOutOfRangeException
).
Recomiendo realizar primero una solicitud HEAD HTTP y examinar el valor del encabezado Content-Length
devuelto para determinar la cantidad de bytes en el archivo que está descargando y luego establecer el valor de tiempo de espera correspondiente para la solicitud GET
posterior o simplemente especificar un tiempo de espera muy largo Valor que nunca esperarías superar.