Тайм-аут FTP на NLST, когда каталог пуст

Обновлено: узнал, что 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 реагирует на пустой каталог, о котором я не знаю?

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

Любые мысли или указания будут оценены.

Спасибо!

Эрик Сиппл

WebMethods? Я ЧУВСТВУЮ ТВОЮ БОЛЬ!!!

erickson 11.09.2008 22:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
5 859
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я не уверен, была ли это та же проблема, но у меня были аналогичные симптомы некоторое время назад при использовании другого 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 работает с непустым каталогом, он должен работать с пустым.

Итак, я предполагаю, что либо:

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

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

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

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

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

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

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

Говард

Другие вопросы по теме