2015-11-23 12 views
2

J'essaie de télécharger des fichiers sur un serveur FTP FileZilla. J'ai installé le serveur sur mon PC et j'utilise un simple script C# pour télécharger des fichiers. Cela fonctionne correctement quand je cours le manuscrit de la même machine. Quand j'ai essayé d'exécuter le script à partir d'un autre ordinateur à partir identiques ou différents LAN je suis arrivé des questions qui sont:Le fichier n'est pas téléchargé sur le serveur FTP sur certaines machines lors de l'utilisation de WebClient.UploadFileAsync

(not logged in) (ClientIP)> USER userID 
(not logged in) (ClientIP)> 331 Password required for userID 
(not logged in) (ClientIP)> PASS *************** 
    userID (ClientIP)> 230 Logged on 
    userID (ClientIP)> OPTS utf8 on 
    userID (ClientIP)> 202 UTF8 mode is always enabled. No need to send this command. 
    userID (ClientIP)> PWD 
    userID (ClientIP)> 257 "/" is current directory. 
    userID (ClientIP)> TYPE I 
    userID (ClientIP)> 200 Type set to I 
    userID (ClientIP)> PASV 
    userID (ClientIP)> 227 Entering Passive Mode (ClientIP) 

Ce qui pourrait être causé les problèmes ici? Le message que je reçois de mon PC est la suivante:

(not logged in) (pcIP)> USER userID 
(not logged in) (pcIP)> 331 Password required for userID 
(not logged in) (pcIP)> PASS *************** 
userID (pcIP)> 230 Logged on 
userID (pcIP)> OPTS utf8 on 
userID (pcIP)> 202 UTF8 mode is always enabled. No need to send this command. 
userID (pcIP)> PWD 
userID (pcIP)> 257 "/" is current directory. 
userID (pcIP)> TYPE I 
userID (pcIP)> 200 Type set to I 
userID (pcIP)> PASV 
userID (pcIP)> 227 Entering Passive Mode ((pcIP)) 
userID (pcIP)> STOR myTempDoc.pdf 
userID (pcIP)> 150 Opening data channel for file upload to server of "/myTempDoc.pdf" 
userID (pcIP)> 226 Successfully transferred "/myTempDoc.pdf" 

La seule différence est que dans le premier cas, je ne peux pas télécharger le fichier souhaité. Quelle pourrait être la différence ici?

uploadX(string path) 
{ 
    string host = "ftp://ip:port/"; 
    string user = "userID"; 
    string pass = "password"; 
    WebClient Xclient = new System.Net.WebClient(); 
    Uri uri = new Uri(host + new FileInfo(path).Name); 
    Xclient.Credentials = new System.Net.NetworkCredential(user, pass); 
    Xclient.UploadFileAsync(uri, "STOR", path); 
} 

Et dans ma fonction principale que j'appelle uploadX("docName").

+0

Peut-être partager un code C# de votre fonctionnalité de téléchargement? – rinukkusu

+0

Vérifiez ma question actualisée. –

+0

Quel est le message d'erreur? –

Répondre

1

Vous n'attendez pas la fin du téléchargement. Donc, s'il s'agit d'un petit script autonome qui sort peu après les retours uploadX, le téléchargement peut ne pas finir du tout, avant la fin du script/de l'application. Cela pourrait expliquer le comportement aléatoire sur différentes machines.

Assurez-vous que le téléchargement est terminé. Soit en capturant UploadFileCompleted event, soit simplement en utilisant un blocage UploadFile method.

+0

Fondamentalement, le problème est avec le pare-feu. J'ajoute le port aux exceptions en suivant les instructions d'ici http://www.howtogeek.com/140352/how-to-host-an-ftp-server-on-windows-with-filezilla/. Cependant, j'ai réussi à envoyer le fichier uniquement lorsque j'éteins le pare-feu. –

+0

Ensuite, votre question est [hors sujet] (http://stackoverflow.com/help/on-topic) sur Stack Overflow. –

+0

Cependant, je ajoute le port à la liste des exceptions dans le pare-feu, donc il ne pouvait pas être un problème de pare-feu. –

1

Avez-vous vérifié les pare-feu pour vous assurer que les ports de données sont ouverts?

Comme il est en train de passer en mode PASV, le serveur FTP devrait envoyer un nouveau port sur lequel communiquer. Généralement, ces ports de données sont compris entre 1024 et 5000.

Désactivez les pare-feu Windows pour voir si le problème est résolu. Si c'est le cas, ouvrez les ports ci-dessus dans le pare-feu ou dites à FileZilla d'utiliser un ensemble spécifique de ports dans les paramètres et ouvrez ces ports.

+0

Fondamentalement, le problème est avec le pare-feu. J'ajoute le port aux exceptions en suivant les instructions d'ici http://www.howtogeek.com/140352/how-to-host-an-ftp-server-on-windows-with-filezilla/. Cependant, j'ai réussi à envoyer le fichier uniquement lorsque j'éteins le pare-feu. –