Frage

Ich versuche Zend-Framework (von http://framework.zend.com/releases/zendframework-1.11.11/zendframework-1.11.11.zip) einfach mit Webclient verwenden

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

Die Datei wird erstellt, aber leer. Ich habe die Antwort mit Fiddler und ich überprüft HTTP 200, korrekte inhaltliche Länge, aber "Verbindung: geschlossen" und Fiddler zeigt "-1" in der Spalte "Body".

Ich habe versucht, Benutzeragenten (von Google Chrome Request kopiert) und "Verbindung: Keep-Alive" zu Headers, aber keine davon hat geholfen. Ich bin mir auch ziemlich sicher, dass mein Programm diese Datei ein- oder zweimal mit derselben URL heruntergeladen hat. Es gibt keine Fehler in Ereignissen, die von WebClient abgefeuert wurden.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Nur meine Vermutung: Vielleicht können Sie versuchen, die Webclient -Instanz an einem Ort zu behalten, wäre nicht der Müll. Wenn das DownloadFileCompleted -Ereignis abgefeuert hat, reinigen Sie einfach den Verweis auf die Webclient -Instanz und lassen GC den Speicher später zurückerobern (und vergessen Sie nicht, die Methode anzurufen).

Andere Tipps

Ok, ich habe die Antwort gefunden! Vor dem Herunterladen der Datei habe ich ihre Größe überprüft, indem ich httpwebRequest gesendet habe. Das Problem war, dass ich die Antwort nicht schließt ().

Danke für die Antworten, sie waren schöne Hinweise.

Versuchen Sie, mit dem umzugehen DownloadProgressChanged und DownloadFileCompleted Veranstaltung.

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

Wenn Sie in der folgenden Zeile in Windows "C: temp.zip" in Windows aktiviert sind, speichern Sie die Datei nicht, da Sie ohne erhöhte Berechtigungen nicht außerhalb von Benutzerverzeichnissen schreiben dürfen:

downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top