1

编辑:了解到 Webmethods 实际上使用 NLST,而不是 LIST,如果这很重要的话

我们的业务使用 WebMethods 集成服务器来处理我们的大部分出站通信,它的 FTP 功能还有一些不足之处。我们遇到了一个可能特定于 WebMethods 的问题,但如果有人能指出我可能会导致这种情况的方向,我将不胜感激。

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

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

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

知道什么会导致 FTP 客户端在等待空目录上的 NLST 响应时超时?来自 FTP 服务器的可见响应似乎是相同的,但是 NLST 对我不知道的空目录的响应方式是否有所不同?

这个问题在这两台服务器上是一致的。在包含文件或子目录的目录上一切正常,但在为空时则不行。

任何想法或方向将不胜感激。

谢谢!

埃里克·斯普尔

4

5 回答 5

2

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

于 2008-09-11T18:48:50.397 回答
2

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

如果您改用被动 (PASV) 模式,则不应出现问题。

于 2008-09-11T19:47:35.513 回答
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 命令
  • 服务器通过数据套接字传输列表(再次为零字节)
  • 服务器关闭数据套接字
于 2008-09-18T10:15:10.993 回答
0

明天在这里完成维护时,我将运行一些设置为被动的新测试,但我不确定这是问题所在。如果该目录中有文件或子目录,我们可以获得目录列表。只有当我们进行 NLST 处理的目录为空时,它才会失败。

主动/被动差异是否只体现在空目录中,还是有另一种可能性?

于 2008-09-11T19:53:10.087 回答
0

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

霍华德

于 2009-06-05T22:17:05.843 回答