Question

MODIFIER:J'ai appris que Webmethods utilise réellement NLST, pas LIST, si cela compte

Notre entreprise utilise le serveur d'intégration WebMethods pour gérer la plupart de nos communications sortantes, et sa fonctionnalité FTP laisse à désirer.Nous rencontrons un problème qui peut être spécifique à WebMethods, mais si quelqu'un peut m'indiquer quels types de choses pourraient causer cela, je l'apprécierais.

Lors de l'interrogation de deux serveurs FTP de nos partenaires, nous nous connectons sans problème mais, lorsque nous effectuons un NLST sur un répertoire vide (pas de fichiers ni de sous-répertoires), le délai expire.L'erreur réelle est :

com.wm.net.ftpCException :[ISC.0064.9010] java.net.SocketTimeoutException :Accepter le délai expiré

Il est lancé lors de l'invocation du service pub.client.ftp:ls.Je me suis connecté avec un certain nombre de clients FTP sans problème sur les mêmes sites.J'ai utilisé le client FTP par défaut dans Windows, FileZilla et lftp.Le tout sans problème.Les serveurs eux-mêmes ne sont pas le même logiciel de serveur FTP d'après ce que je peux dire.L'un est Microsoft FTP, l'autre sur lequel je ne suis pas sûr mais ce n'est certainement pas Microsoft.

Avez-vous une idée de ce qui pourrait provoquer l'expiration d'un client FTP lors de l'attente d'une réponse NLST sur un répertoire vide ?Les réponses visibles du serveur FTP semblent être les mêmes, mais y a-t-il une différence dans la façon dont NLST répond pour un répertoire vide que je ne connais pas ?

Ce problème est cohérent sur ces deux serveurs.Tout fonctionne correctement sur les répertoires contenant des fichiers ou des sous-répertoires, mais pas lorsqu'ils sont vides.

Toutes les pensées ou directions seraient appréciées.

Merci!

Eric Sipple

Était-ce utile?

La solution

J'ai essayé cela dans les mises à jour WebMethods IS version 6.5 WmPRT_6-5-1_SP1, IS_6-5_SP3.

Cela a parfaitement fonctionné du premier coup.

J'ai activé le débogage sur le serveur FTP (ftpd par défaut de Debian).Le NLST de WebMethods honore le paramètre actif/passif qui lui est transmis.

Il n'y a rien de spécial à propos de la commande NLST, ni de son comportement correct avec un répertoire vide -- si LIST fonctionne, alors RETR, STOR et NLST devraient l'être aussi.Si NLST fonctionne avec un répertoire non vide, il devrait fonctionner avec un répertoire vide.

Donc je suppose que soit :

  • Votre version de WM a un bug, mais pas la mienne
  • Votre serveur FTP a un bug, pas le mien
  • Il y a un pare-feu farfelu prenant en compte le protocole dans votre système qui n'aime pas les sockets de données FTP sans données.

Les fournisseurs de pare-feu sont un peu capricieux en matière de FTP...Lorsque vous effectuez des tests avec d'autres clients, assurez-vous qu'ils proviennent de la même machine sur laquelle WebMethods Integration Server est exécuté.

Juste pour mémoire, voici ce qui devrait se passer pour un NLST actif

  • le client ouvre un socket d'écoute et envoie une commande PORT avec les détails de ce socket
  • le client envoie la commande NLST
  • le serveur se connecte au socket d'écoute du client (c'est le socket de données)
  • le serveur transmet la liste via le socket de données (dans ce cas, zéro octet)
  • le serveur ferme le socket de données

...et en mode passif

  • le client envoie la commande PASV
  • le serveur ouvre un socket d'écoute et répond avec une réponse PASV contenant ses détails
  • le client se connecte au socket d'écoute (c'est le socket de données)
  • le client envoie la commande NLST
  • le serveur transmet la liste via le socket de données (à nouveau zéro octet)
  • le serveur ferme le socket de données

Autres conseils

Je ne sais pas si c'était le même problème, mais j'ai eu des symptômes similaires il y a quelque temps en utilisant un autre client FTP en Java (commons.net).Le problème s'est avéré être dû au mode actif/passif de la connexion.Je suis désolé de ne pas pouvoir vous donner plus de détails, c'est tout ce dont je me souviens...j'espère que cela aidera.

Guillermo Vasconcelos avait raison dans sa réponse.Il existe deux modes FTP, actif et passif.Le défaut FTP Le mode est actif.Active nécessite que le serveur se reconnecte au client sur un port TCP/IP.Cela ne fonctionne pas avec les pare-feu car il est probable que ce port soit bloqué ou si vous êtes derrière un routeur avec NAT, non mappé.

Si vous utilisez plutôt le mode Passif (PASV), vous ne devriez pas vous tromper.

Je vais effectuer de nouveaux tests avec les paramètres passifs demain lorsque la maintenance sera effectuée ici, mais je ne suis pas sûr que ce soit le problème.Nous pouvons obtenir une liste de répertoires s'il y a des fichiers ou des sous-répertoires dans ce répertoire.Cela échoue uniquement lorsque le répertoire sur lequel nous effectuons le NLST est vide.

La différence actif/passif ne se manifesterait-elle que pour un répertoire vide, ou existe-t-il une autre possibilité ?

FTP nécessite que le port spécifié et celui situé au-dessus soient ouverts via le pare-feu.Lorsque j'ai eu des problèmes avec le délai d'expiration de webMethods, c'était parce que le pare-feu n'avait pas le port de retour ouvert.

Howard

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top