Pregunta

Estoy tratando de descargar Zend-Framework (de http://framework.zend.com/releases/zendframework-1.11.11/zendframework-1.11.11.zip) Simplemente usando WebClient

string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
WebClient downloader= new WebClient();
downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");

Se crea el archivo, pero está vacío. Verifiqué la respuesta usando Fiddler y obtengo HTTP 200, correcto-longitud de contenido pero "Connection: cerrada" y Fiddler muestra "-1" en la columna "Body".

He intentado agregar el agente de usuarios (copiado de la solicitud de Google Chrome) y "Conexión: Keep-Alive" a los encabezados, pero ninguno de estos ayudó. También estoy bastante seguro de que mi programa descargó este archivo usando la misma URL una o dos veces antes. No hay errores en los eventos disparados por WebClient.

¿Algunas ideas?

¿Fue útil?

Solución

Solo supongo: tal vez puedas tratar de mantener la instancia de client web en algún lugar no se recolecta la basura. Cuando se disparó el evento DownloadFileCompleted, simplemente limpia la referencia a la instancia de WebClient y deja que GC reclame la memoria más tarde (y no olvide llamar al método de eliminación).

Otros consejos

Ok, ¡Finnaly encontré la respuesta! Antes de descargar el archivo, estaba revisando su tamaño enviando httpwebrequest. El problema era que no cerré () la respuesta.

Gracias por las respuestas, fueron buenas pistas.

Intenta manejar el DownloadProgressChanged y DownloadFileCompleted evento.

private void button1_Click(object sender, EventArgs e)
  {
   string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
   WebClient downloader = new WebClient();
   downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(downloader_DownloadFileCompleted);
   downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloader_DownloadProgressChanged);
   downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
  }

 void downloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
   {
      label1.Text = e.BytesReceived + " " + e.ProgressPercentage;
    }
  void downloader_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
   {
       if (e.Error != null)
         MessageBox.Show(e.Error.Message);
       else
         MessageBox.Show("Completed!!!");
   }

Si tiene habilitado la UAC en Windows "C: temp.zip" en la siguiente línea no puede guardar el archivo porque no se le permite escribir fuera de los directorios de usuario sin permisos elevados:

downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top