Обновлено: узнал, что Webmethods фактически использует NLST, а не LIST, если это имеет значение.
Наш бизнес использует сервер интеграции WebMethods для обработки большей части наших исходящих сообщений, а его функциональность FTP оставляет желать лучшего. У нас возникла проблема, которая может быть специфической для WebMethods, но если кто-нибудь может указать мне, какие вещи могут вызвать это, я был бы признателен.
При опросе двух FTP-серверов наших партнеров мы подключаемся без проблем, но при выполнении NLST в пустом каталоге (без файлов и подкаталогов) время ожидания истекает. Фактическая ошибка:
com.wm.net.ftpCException: [ISC.0064.9010] java.net.SocketTimeoutException: Accept timed out
Он создается во время вызова службы pub.client.ftp: ls. Я без проблем вошел в систему с несколькими FTP-клиентами на одни и те же сайты. Я использовал любой FTP-клиент по умолчанию в Windows, FileZilla и lftp. Все без проблем. Насколько я могу судить, сами серверы - это не одно и то же программное обеспечение для FTP-серверов. Один из них - Microsoft FTP, другой, в котором я не уверен, но определенно не Microsoft.
Есть идеи, что может вызвать тайм-аут FTP-клиента при ожидании ответа NLST в пустом каталоге? Видимые ответы FTP-сервера выглядят одинаково, но есть ли разница в том, как NLST реагирует на пустой каталог, о котором я не знаю?
Эта проблема постоянна на этих двух серверах. Все работает нормально в каталогах с файлами или подкаталогами внутри, но не когда они пусты.
Любые мысли или указания будут оценены.
Спасибо!
Эрик Сиппл




Я не уверен, была ли это та же проблема, но у меня были аналогичные симптомы некоторое время назад при использовании другого FTP-клиента на Java (commons.net). Проблема оказалась вызвана активным / пассивным режимом подключения. Извините, я не могу дать вам больше подробностей, это все, что я помню ... надеюсь, что это поможет.
Гильермо Васконселос был прав в своем ответе. Есть два режима FTP: активный и пассивный. По умолчанию активен режим FTP. Active требует, чтобы сервер снова подключился к клиенту через некоторый порт TCP / IP. Это не работает с брандмауэрами, потому что есть вероятность, что этот порт будет заблокирован или если вы находитесь за маршрутизатором с NAT, он не сопоставлен.
Если вместо этого вы используете пассивный режим (PASV), вы не должны зависнуть.
Я собираюсь запустить несколько новых тестов с настройками на пассивный завтра, когда здесь будет завершено обслуживание, но я не уверен, что проблема в этом. Мы можем получить список каталогов, если в этом каталоге есть файлы или подкаталоги. Он терпит неудачу только тогда, когда каталог, в котором мы используем NLST, пуст.
Будет ли разница активный / пассивный проявляться только для пустого каталога или существует другая возможность?
Я пробовал это в WebMethods IS Version 6.5 Updates WmPRT_6-5-1_SP1, IS_6-5_SP3.
Это сработало отлично с первого раза.
Я включил отладку на FTP-сервере (ftpd по умолчанию в Debian). NLST WebMethods учитывает переданный ему параметр active / passive.
Нет ничего особенного ни в команде NLST, ни в ее правильном поведении с пустым каталогом - если LIST работает, то должны работать и RETR, STOR и NLST. Если NLST работает с непустым каталогом, он должен работать с пустым.
Итак, я предполагаю, что либо:
Производители брандмауэров немного своенравны, когда дело касается FTP ... При тестировании с другими клиентами убедитесь, что он с того же компьютера, на котором запущен сервер интеграции WebMethods.
Для протокола, вот что должно произойти для активного NLST.
... и в пассивном режиме
FTP требует, чтобы указанный порт и порт над ним были открыты через брандмауэр. Когда у меня возникли проблемы с тайм-аутом webMethods, это произошло из-за того, что брандмауэр не открыл обратный порт.
Говард
WebMethods? Я ЧУВСТВУЮ ТВОЮ БОЛЬ!!!