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



Answers

Necesita utilizar HttpWebRequest lugar de WebClient ya que no puede establecer el tiempo de espera en WebClient sin ampliarlo (aunque utilice HttpWebRequest ). El uso de HttpWebRequest en HttpWebRequest lugar le permitirá establecer el tiempo de espera.

Question

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 alguna forma de establecer un tiempo de espera infinito en este objeto? O si no, ¿alguien puede ayudarme con un ejemplo de una manera alternativa de hacer esto?

La URL funciona bien en un navegador; solo demora unos 3 minutos en mostrarse.




'CORRECTED VERSION OF LAST FUNCTION IN VISUAL BASIC BY GLENNG

Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
            Dim w As System.Net.WebRequest = MyBase.GetWebRequest(address)
            If _TimeoutMS <> 0 Then
                w.Timeout = _TimeoutMS
            End If
            Return w  '<<< NOTICE: MyBase.GetWebRequest(address) DOES NOT WORK >>>
        End Function



No se pudo conseguir que el código w.Timeout funcione cuando se desconectó el cable de red, simplemente no se agotó el tiempo de espera, se movió a usar HttpWebRequest y ahora funciona.

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);
}



Links