目录为空时,NLST上的FTP超时

时间:2008-09-11 17:51:20

标签: java ftp webmethods

编辑:据悉,Webmethods实际上使用的是NLST,而不是LIST,如果重要的话

我们的业务使用WebMethods集成服务器来处理大部分出站通信,其FTP功能还有待改进。我们遇到的问题可能是WebMethods特有的,但如果有人能指出我可能会导致这种情况的方向,我会很感激。

在轮询我们的两个合作伙伴的FTP服务器时,我们连接没有问题,但是当在一个空的目录(没有文件和没有子目录)上进行NLST时,它会超时。实际错误是:

  

com.wm.net.ftpCException:[ISC.0064.9010] java.net.SocketTimeoutException:接受超时

在调用pub.client.ftp:ls服务期间抛出它。我已经使用许多FTP客户端登录到同一站点没有问题。我已经使用了Windows中的默认FTP客户端,FileZilla和lftp。一切都没有问题。从我所知道的,服务器本身并不是相同的FTP服务器软件。一个是微软FTP,另一个我不确定,但绝对不是微软。

在等待空目录上的NLST响应时,有什么可能导致FTP客户端超时的原因吗?来自FTP服务器的可见响应看起来是一样的,但NLST如何响应我不知道的空目录有什么不同?

这两个服务器上的问题是一致的。在包含文件或子目录的目录中,一切都能正常运行,但在空的情况下则不行。

任何想法或指示都将不胜感激。

谢谢!

Eric Sipple

5 个答案:

答案 0 :(得分:2)

我不确定它是否是同一个问题,但我之前在Java(commons.net)中使用另一个FTP客户端时有类似的症状。问题原来是由连接的主动/被动模式引起的。 对不起,我不能给你更多的细节,这就是我所能记住的......希望有所帮助。

答案 1 :(得分:2)

Guillermo Vasconcelos的回答是正确的。有两种FTP模式,主动和被动。默认FTP模式处于活动状态。 Active要求服务器在某个TCP / IP端口上连接回客户端。这不适用于防火墙,因为可能会阻止此端口,或者如果您位于具有NAT的路由器后面,而不是映射。

如果使用Passive(PASV)模式,则不应该挂起。

答案 2 :(得分:2)

我在WebMethods IS 6.5版更新了WmPRT_6-5-1_SP1,IS_6-5_SP3。

第一次完美运作。

我打开了FTP服务器上的调试(Debian的默认ftpd)。 WebMethods的NLST尊重传递给它的主动/被动参数。

NLST命令没有什么特别之处,也没有关于空目录的正确行为 - 如果LIST有效,那么RETR,STOR和NLST也是如此。如果NLST与非空目录一起使用,它应该使用空目录。

所以我的猜测是:

  • 您的WM版本有一个我没有的错误
  • 您的FTP服务器有一个我没有的错误
  • 你的系统中有一个古怪的协议感知防火墙,它不喜欢没有数据的FTP数据套接字。

防火墙厂商在FTP方面有点任性...... 在与其他客户端进行测试时,请确保它来自运行WebMethods Integration Server的同一台计算机。

仅供记录,以下是活动NLST应该发生的事情

  • 客户端打开一个侦听套接字,并发送一个带有该套接字详细信息的PORT命令
  • 客户端发送NLST命令
  • 服务器连接到客户端的侦听套接字(这是数据套接字)
  • 服务器通过数据套接字传输列表(在本例中为零字节)
  • 服务器关闭数据套接字

......并处于被动模式

  • 客户端发送PASV命令
  • 服务器打开一个侦听套接字,并回复包含其详细信息的PASV响应
  • 客户端连接到侦听套接字(这是数据套接字)
  • 客户端发送NLST命令
  • 服务器通过数据套接字传输列表(再次为零字节)
  • 服务器关闭数据套接字

答案 3 :(得分:0)

我将在这里进行一些新的测试,将设置设置为被动,此时维护工作已完成,但我不确定是否存在问题。如果该目录中有文件或子目录,我们可以获得目录列表。它只在我们NLST-ing的目录为空时才会失败。

主动/被动差异只会表现为空目录,还是存在其他可能性?

答案 4 :(得分:0)

FTP要求指定的端口和上面的端口都通过防火墙打开。当我遇到webMethods超时的问题时,原因是防火墙没有打开返回端口。

霍华德