2010-03-23 5 views
1

J'ai une application WPF et je veux télécharger un fichier.Webclient downloadfileasync ne fonctionne pas

J'utilise System.Net; et j'ai le code suivant:

WebClient ww = new WebClient(); 
ww.DownloadFileAsync(
    new Uri("http://www.sinvise.net/tester/1.jpg"), 
    AppDomain.CurrentDomain.BaseDirectory + "\\1.jpg"); 

Le problème est, est qu'il ne je ne sais pas pas télécharger le fichier, il est juste apparaître comme fichier 0kb et non le téléchargement, quel est le problème, peut quelqu'un vous aide?

+0

Je suppose que www est une faute de frappe. Sinon, il y a un problème immédiatement. – spender

+0

Désolé, il s'agit d'une faute de frappe –

+0

J'ai essayé d'exécuter le téléchargement sur mon ordinateur et il téléchargé très bien (sans en-têtes supplémentaires ou quelque chose de spécial). Vérifiez si vous n'avez pas de pare-feu ou quelque chose comme ça bloquant le transfert. Belle photo btw :-) –

Répondre

0

trouvé la réponse, je lis que DownloadFile vérifie la DNS d'abord avant tout, si j'utilise une adresse IP, il ne fait pas la vérification et fonctionne immédiatement.

Merci pour l'aide de tout le monde à ce sujet.

7

Que diriez-vous d'écouter l'événement DownloadFileCompleted et de vérifier la propriété AsyncCompletedEventArgs.Error l'événement en avant à votre gestionnaire?

public static void DownLoadFileInBackground(string address) 
    { 
     WebClient client = new WebClient(); 
     Uri uri = new Uri(address); 
     client.DownloadFileCompleted += (sender,e)=> 
             { 
              //inspect e here: 
              //e.Error 
             }; 
     client.DownloadProgressChanged += (sender,e)=> 
              { 
               //e.ProgressPercentage 
              }; 
     client.DownloadFileAsync(uri, "blabla"); 
    } 
+0

Je l'ai essayé et utilisé e.error pour vérifier toute sortie et afficher le progresspercentage dans une barre de progression et j'ai essayé à nouveau avec une boîte de message mais il n'y avait pas de sortie, ni d'événement démarré. –

+0

J'ai trouvé que l'ajout des deux événements éclairci les problèmes intermittents - ce qui est étrange parce que c'est l'une des seules fois où j'ai besoin d'ajouter des événements pour assurer une écriture fiable du fichier. –

2

Certaines demandes de bloc de sites Web qui n'avez pas certains en-têtes dans la demande. Dans un particulier, j'ai trouvé dans le passé est le « User-Agent » en-tête, essayez de copier un en-tête d'une demande de navigateur et l'ajouter dans votre WebClient

WebClient.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0)"); 
+0

Souhait que cela fonctionne mais non, il ne télécharge pas le fichier. –

0

Je voudrais ajouter que la méthode DownloadFileAsync (je ne peux pas parler pour DownloadFile) ne fonctionne pas lorsque vous avez une demande de licence existante et non fermée pour le même fichier. Au moins c'est mon expérience. Il se peut qu'il ne soit pas autorisé par le framework ou le serveur.