2016-12-12 1 views
1

J'ai vu des dizaines d'exemples de problèmes lors de la prise de vue de ce problème en utilisant la bibliothèque dans le titre. L'exemple commun que je vois que travailler est DEVRAIENT:Problèmes System.Net.FtpClient avec openwrite

 string destinationPath = PathInfo.FileNameConvention; 
     using (FileStream fileStream = File.OpenRead(sourcePath)) 
     { 

      using (Stream ftpStream = FTPClient.OpenWrite(string.Format("'{0}'", destinationPath), FtpDataType.ASCII)) 
      { 
       fileStream.CopyTo(ftpStream); 
      } 
     } 

Quand je fais ce code, je reçois une erreur de longueur du nom du journal ftpTrace. Lorsque j'utilise uniquement le chemin de destination, j'obtiens une erreur d'expiration. J'envoie à un mainframe MVS OS. Je peux me connecter et me connecter très bien. capable de soumettre des commandes de site via la méthode ftpclient.execute. J'ai essayé, par curiosité, de soumettre une commande put via la méthode execute et j'ai obtenu une commande inconnue pour put. Quelqu'un a-t-il aussi ce problème?

Aussi la connexion fonctionne bien car j'ai soumis manuellement un fichier via l'invite cmd ftp et a réussi.

Pour certaines informations de base, la méthode OpenWrite de la bibliothèque envoie une commande STOR en utilisant le chemin d'accès envoyé et par défaut le type binaire.

+0

lorsque vous faites FTP, vous devez peut-être utiliser le changement Dir commandes de sorte que fichier long les noms ou les noms de chemin n'affectent pas la fonctionnalité que je vérifierais dans ce premier .. "Changement ChangeDir, puis passe le nom de fichier pas le chemin complet' voir si cela aide – MethodMan

+0

@MethodMan Path.GetFileName (localFile) fait comme vous l'avez décrit. Il prend le chemin local complet et obtient juste le nom du fichier. – ggiaquin16

Répondre

1

Vérifiez que vous avez configuré votre bibliothèque FTP pour utiliser le mode actif (ou activer le mode FTP passif dans votre pare-feu et mainframe)

Réponse longue: Le protocole FTP utilise deux connexions, une connexion de commande du client serveur, et une connexion de données pouvant se connecter du client au serveur (mode passif) ou du serveur au client (mode actif). Si vous utilisez le mode incorrect, un pare-feu non configuré pour ce mode abandonnera votre connexion de données, ce qui provoquera l'erreur de délai d'attente que vous rencontrez. Puisque Windows ftp.exe ne supporte que le mode actif, et que vous ne définissez pas le mode dans votre code, je suppose que le mainframe est configuré en mode actif alors que votre bibliothèque FTP passe par défaut en mode passif. Le mode passif est très courant maintenant puisque le mode actif ne fonctionne pas bien avec les routeurs NAT-ing.

Vérifiez s'il existe un paramètre de configuration pour modifier le mode de transfert, mais ne soyez pas surpris si la bibliothèque ne prend en charge que le mode passif.

Plus d'informations:

+0

Désolé! J'aurais dû spécifier certains détails du client de bibliothèque. En fait, j'avais activé le mode actif, et ce délai était expiré. Quand j'ai le mode passif, cela me donne une connexion refusée par une erreur de serveur. L'administrateur du serveur m'a demandé de le faire en mode passif et j'attends de recevoir des nouvelles de l'équipe de réseautage à propos des ports. La bibliothèque prend en charge plusieurs types d'actifs et passifs. Actuellement, je l'ai mis à passif étendu selon la demande d'administration du serveur. Ceci génère ce message de refus de connexion. – ggiaquin16

+0

Aujourd'hui j'ai appris sur "extended passive" :-) Je vis dans un monde IPv4 trop longtemps je suppose. On dirait que vous allez trier bientôt avec l'aide des administrateurs du réseau, bonne chance! – EventHorizon