Тайм-аут FTP на NLST, когда каталог пуст - PullRequest
1 голос
/ 11 сентября 2008

РЕДАКТИРОВАТЬ: узнал, что Webmethods действительно использует NLST, а не LIST, если это имеет значение

Наш бизнес использует сервер интеграции WebMethods для обработки большинства наших исходящих сообщений, а его функции FTP оставляют желать лучшего. У нас есть проблема, которая может быть специфической для WebMethods, но если кто-то может указать мне, в каких направлениях это может быть причиной, я был бы признателен.

При опросе двух FTP-серверов наших партнеров мы подключаемся без проблем, но при выполнении NLST для пустого каталога (без файлов и подкаталогов) время истекает. Фактическая ошибка:

com.wm.net.ftpCException: [ISC.0064.9010] java.net.SocketTimeoutException: тайм-аут приема

Он выбрасывается во время вызова службы pub.client.ftp: ls. Я вошел в систему с несколькими FTP-клиентами без проблем на тех же сайтах. Я использовал любой FTP-клиент по умолчанию в Windows, FileZilla и LFTP. Все без вопросов. Сами серверы - это не то же самое программное обеспечение FTP-сервера, что я могу сказать. Один из них - Microsoft FTP, другой - я не уверен, но определенно не Microsoft.

Есть идеи, что может привести к тайм-ауту клиента FTP при ожидании ответа NLST в пустом каталоге? Видимые ответы от FTP-сервера выглядят одинаково, но есть ли разница в том, как NLST отвечает на пустой каталог, о котором я не знаю?

Эта проблема согласована на этих двух серверах. В каталогах с файлами или подкаталогами все работает нормально, но не в пустом.

Будем благодарны за любые мысли или указания.

Спасибо!

Эрик Сиппл

Ответы [ 5 ]

2 голосов
/ 18 сентября 2008

Я пробовал это в WebMethods IS Обновления версии 6.5 WmPRT_6-5-1_SP1, IS_6-5_SP3.

С первого раза все заработало.

Я включил отладку на FTP-сервере (ftpd по умолчанию в Debian). NLST WebMethods учитывает переданный ему активный / пассивный параметр.

Нет ничего особенного ни в команде NLST, ни в ее правильном поведении с пустым каталогом - если работает LIST, то должны работать RETR, STOR и NLST. Если NLST работает с непустым каталогом, он должен работать с пустым каталогом.

Так что я думаю, что либо:

  • В вашей версии WM есть ошибка, которой у меня нет
  • Ваш FTP-сервер содержит ошибку, которой у меня нет
  • В вашей системе есть дурацкий межсетевой экран с поддержкой протокола, которому не нравятся сокеты данных FTP без данных.

Поставщики брандмауэров немного странны, когда дело доходит до FTP ... При тестировании с другими клиентами убедитесь, что он находится на том же компьютере, на котором работает сервер интеграции WebMethods.

Просто для справки, вот что должно произойти для активного NLST

  • клиент открывает прослушивающий сокет и отправляет команду PORT с деталями этого сокета
  • клиент отправляет команду NLST
  • сервер подключается к сокету прослушивания клиента (это сокет данных)
  • сервер передает листинг через сокет данных (в данном случае, ноль байтов)
  • сервер закрывает сокет данных

... и в пассивном режиме

  • клиент отправляет команду PASV
  • сервер открывает прослушивающий сокет и отвечает с ответом PASV, содержащим его детали
  • клиент подключается к прослушивающему сокету (это сокет данных)
  • клиент отправляет команду NLST
  • сервер передает листинг через сокет данных (снова нулевые байты)
  • сервер закрывает сокет данных
2 голосов
/ 11 сентября 2008

Гильермо Васконселос был прав в своем ответе. Есть два режима FTP, активный и пассивный. По умолчанию FTP режим активен. Active требует, чтобы сервер снова подключился к клиенту через какой-либо порт TCP / IP. Это не работает с брандмауэрами, потому что есть вероятность, что этот порт будет заблокирован или если вы находитесь за маршрутизатором с NAT, а не с отображением.

Если вместо этого вы используете пассивный режим (PASV), вам не следует зависать.

2 голосов
/ 11 сентября 2008

Я не уверен, что это была та же проблема, но у меня недавно были похожие симптомы при использовании другого FTP-клиента на Java (commons.net). Проблема оказалась вызвана активным / пассивным режимом соединения. Извините, я не могу дать вам больше подробностей, это все, что я могу вспомнить ... надеюсь, это поможет.

0 голосов
/ 06 июня 2009

FTP требует, чтобы как указанный порт, так и порт над ним были открыты через брандмауэр. Когда у меня возникли проблемы с тайм-аутом webMethods, это произошло из-за того, что на брандмауэре не было открыто обратного порта.

Говард

0 голосов
/ 11 сентября 2008

Я собираюсь запустить несколько новых тестов с настройками, которые станут пассивными завтра, когда будет выполнено обслуживание, но я не уверен, что это проблема. Мы можем получить список каталогов, если в этом каталоге есть файлы или подкаталоги. Сбой возможен только тогда, когда каталог, в котором мы находимся NLST, пуст.

Активная / пассивная разница проявляется только для пустой директории, или есть другая возможность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...