Pregunta

EDITAR:Aprendí que Webmethods en realidad usa NLST, no LIST, si eso importa

Nuestra empresa utiliza el servidor de integración WebMethods para manejar la mayoría de nuestras comunicaciones salientes y su funcionalidad FTP deja mucho que desear.Estamos teniendo un problema que puede ser específico de WebMethods, pero si alguien puede indicarme qué tipo de cosas podrían causar esto, se lo agradecería.

Al sondear dos de los servidores FTP de nuestros socios, nos conectamos sin problemas, pero cuando realizamos un NLST en un directorio que está vacío (sin archivos ni subdirectorios), se agota el tiempo de espera.El error real es:

com.wm.net.ftpCExcepción:[ISC.0064.9010] java.net.SocketTimeoutException:Aceptar tiempo de espera agotado

Se lanza durante la invocación del servicio pub.client.ftp:ls.He iniciado sesión con varios clientes FTP sin problemas en los mismos sitios.He usado el cliente FTP predeterminado en Windows, FileZilla y lftp.Todo sin problemas.Por lo que puedo decir, los servidores en sí no son el mismo software de servidor FTP.Uno es Microsoft FTP, el otro no lo sé, pero definitivamente no es Microsoft.

¿Alguna idea de qué podría causar que un cliente FTP agote el tiempo de espera cuando espera una respuesta NLST en un directorio vacío?Las respuestas visibles del servidor FTP parecen ser las mismas, pero ¿hay alguna diferencia en cómo responde NLST ante un directorio vacío que desconozco?

Este problema es consistente en estos dos servidores.Todo funciona bien en directorios con archivos o subdirectorios dentro, pero no cuando están vacíos.

Cualquier idea o dirección sería apreciada.

¡Gracias!

Eric Sipple

¿Fue útil?

Solución

Probé esto en las actualizaciones de WebMethods IS versión 6.5 WmPRT_6-5-1_SP1, IS_6-5_SP3.

Funcionó perfectamente la primera vez.

Activé la depuración en el servidor FTP (el ftpd predeterminado de Debian).El NLST de WebMethods respeta el parámetro activo/pasivo que se le pasa.

No hay nada especial en el comando NLST, ni en su comportamiento correcto con un directorio vacío: si LIST funciona, también deberían hacerlo RETR, STOR y NLST.Si NLST funciona con un directorio que no está vacío, debería funcionar con uno vacío.

Entonces mi suposición es que:

  • Tu versión de WM tiene un error que el mío no
  • Tu servidor FTP tiene un error que el mío no tiene
  • Hay un extraño firewall consciente de protocolos en su sistema al que no le gustan los sockets de datos FTP sin datos en ellos.

Los proveedores de firewalls son un poco rebeldes cuando se trata de FTP...Al realizar pruebas con otros clientes, asegúrese de que sea desde la misma máquina en la que se ejecuta WebMethods Integration Server.

Solo para que conste, esto es lo que debería suceder con un NLST activo

  • El cliente abre un socket de escucha y envía un comando PORT con los detalles de ese socket.
  • el cliente envía el comando NLST
  • El servidor se conecta al socket de escucha del cliente (este es el socket de datos).
  • El servidor transmite el listado a través del socket de datos (en este caso, cero bytes).
  • El servidor cierra el socket de datos.

...y en modo pasivo

  • el cliente envía el comando PASV
  • El servidor abre un socket de escucha y responde con una respuesta PASV que contiene sus detalles.
  • el cliente se conecta al socket de escucha (este es el socket de datos)
  • el cliente envía el comando NLST
  • El servidor transmite el listado a través del socket de datos (cero bytes nuevamente)
  • El servidor cierra el socket de datos.

Otros consejos

No estoy seguro de si se trata del mismo problema, pero hace un tiempo tuve síntomas similares al usar otro cliente FTP en Java (commons.net).El problema resultó ser causado por el modo activo/pasivo de la conexión.Lamento no poder darte más detalles, es todo lo que recuerdo...Espero que ayude.

Guillermo Vasconcelos acertó en su respuesta.Hay dos modos FTP, Activo y Pasivo.El valor por defecto ftp El modo está activo.Active requiere que el servidor se conecte nuevamente al cliente en algún puerto TCP/IP.Esto no funciona con firewalls porque es probable que este puerto esté bloqueado o si está detrás de un enrutador con NAT, no asignado.

Si en su lugar utiliza el modo Pasivo (PASV), no debería dominarlo.

Mañana ejecutaré algunas pruebas nuevas con la configuración pasiva cuando finalice el mantenimiento aquí, pero no estoy seguro de que ese sea el problema.Podemos obtener una lista de directorios si hay archivos o subdirectorios en ese directorio.Sólo falla cuando el directorio en el que estamos haciendo NLST está vacío.

¿La diferencia activo/pasivo solo se manifestaría en un directorio vacío o existe otra posibilidad?

FTP requiere que tanto el puerto especificado como el que está encima se abran a través del firewall.Cuando tuve problemas con el tiempo de espera de webMethods, fue porque el firewall no tenía el puerto de retorno abierto.

Howard

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top