2010-09-18 13 views
2

Je suis en train de télécharger un fichier zip sur mon serveur en faisantException avec WebClient.DownloadFileAsync

WebClient.DownloadFileAsync(new Uri(DownloadLink), 
          Path.GetFileName(DownloadLink)); 

J'ai des événements liés à télécharger terminé et le progrès changé et lorsque le téléchargement est à 99%, il arrête. Donc, je lui donne une minute et puis il me donne une exception:

 
System.Net.WebException: An exception occurred during a WebClient request. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host 
    at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) 
    --- End of inner exception stack trace --- 
    at System.Net.ConnectStream.EndRead(IAsyncResult asyncResult) 
    at System.Net.WebClient.DownloadBitsReadCallbackState(DownloadBitsState state, IAsyncResult result) 
    --- End of inner exception stack trace --- 

Je suis perplexe. Je peux télécharger le fichier correctement sur mon navigateur.

Répondre

0

Je n'ai pas de réponse directe à votre question, mais il y a quelques choses que j'essaierai pour voir si je pourrais identifier le problème. Commencez par vous débarrasser de l'appel asynchrone et appelez DownloadFile. L'erreur se produit-elle toujours?

Appelez DownloadData pour obtenir les données dans un tableau d'octets, puis enregistrez le fichier.

Si l'un ou les deux de travail ci-dessus, alors je dirais qu'il y a quelque chose de mal avec votre gestionnaire d'événements DownloadDataCompleted, bien que la raison pour laquelle il lancer un WebException est au-delà de moi.

Oh, une autre chose: êtes-vous sûr que Path.GetFileName(DownloadLink) retourne un nom de fichier valide, et que vous avez les permissions nécessaires pour écrire le fichier dans le répertoire courant?

+0

Mêmes problèmes. Et oui, c'est un nom valide. Si je regarde le fichier, il est complètement téléchargé. De plus, mon code ne semble pas être le problème. J'ai demandé à des amis de l'essayer et le téléchargement a fonctionné pour eux. |: – Eaton

+0

Deux questions: 1) Appeler DownloadData pour obtenir le fichier dans un tableau d'octets lève également une exception? 2) Vos amis ont essayé d'exécuter le même code que vous utilisez, et cela fonctionne? –

+0

Oui, et je suis sur un autre réseau maintenant et ça fonctionne très bien. – Eaton

0

Vous obtiendrez une exception WebException si DownloadLink renvoie une erreur telle que 404. Placez un point d'arrêt dans et vérifiez le chemin réel entrant dans la méthode. Edit: Si DownloadLink est une vérification de chaîne d'URL si vous échappez '/'. Essayez @ "..."

+0

Pas un 404, ce serait une erreur différente. Comme je l'ai dit, il télécharge techniquement 99% du fichier. – Eaton

+0

Cela signifie probablement que le serveur ferme brutalement la connexion sur le client. Pour vérifier, vous pouvez soit obtenir une trace wireshark, ou vous pouvez obtenir un journal de suivi system.net - voir http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html – feroze

+0

Pouvez-vous obtenir le tracelog comme je l'ai suggéré? Cela montrera ce qui se passe en ce qui concerne le client. – feroze