Le fichier téléchargé à l’aide de webclient.DownloadFileAsync a 0 Ko.

J’essaie de télécharger zend-framework (à partir de http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip ) simplement à l’aide de WebClient.

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

Le fichier est créé, mais il est vide. J’ai vérifié la réponse en utilisant fiddler et j’ai obtenu HTTP 200, la longueur du contenu est correcte mais “connection: closed” et fiddler indique “-1” dans la colonne “body”.

J’ai essayé d’append des agents utilisateur (copiés à partir de la requête de Google Chrome) et “connexion: garder en vie” dans les en-têtes, mais rien de tout cela ne m’a aidé. Je suis également presque sûr que mon programme a téléchargé ce fichier en utilisant la même URL une ou deux fois auparavant. Il n’y a pas d’erreur dans les événements déclenchés par WebClient.

Des idées?

Juste mon hypothèse: peut-être que vous pourriez essayer de garder l’instance WebClient dans un endroit ne serait pas ramassée. Lorsque l’événement DownloadFileCompleted est déclenché, il vous suffit de nettoyer la référence à l’instance WebClient et de laisser GC récupérer la mémoire ultérieurement (sans oublier d’appeler la méthode Dispose).

Ok, j’ai finalement trouvé la réponse! Avant de télécharger le fichier, je vérifiais sa taille en envoyant HttpWebRequest. Le problème était que je n’ai pas fermé () la réponse.

Merci pour les réponses, c’étaient de bons indices.

Essayez de gérer les événements DownloadProgressChanged et DownloadFileCompleted .

 private void button1_Click(object sender, EventArgs e) { ssortingng 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 vous avez activé le contrôle de compte d’utilisateur dans Windows, “C: \ temp.zip” dans la ligne suivante ne pourra pas enregistrer le fichier, car vous n’êtes pas autorisé à écrire en dehors des répertoires utilisateur sans permissions élevées:

 downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");