c# Cómo cambiar el tiempo de espera en un objeto WebClient .NET





3 Answers

HttpWebRequest usar HttpWebRequest lugar de WebClient ya que no puede configurar el tiempo de espera en WebClient sin extenderlo (aunque use HttpWebRequest ). Usar el HttpWebRequest en HttpWebRequest lugar le permitirá establecer el tiempo de espera.

c# .net file download webclient

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.






Related