Вопрос

РЕДАКТИРОВАТЬ:Узнал, что 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 реагирует на пустой каталог, о котором я не знаю?

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

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

Спасибо!

Эрик Сиппл

Это было полезно?

Решение

Я попробовал это в 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
  • сервер передает список через сокет данных (снова ноль байт)
  • сервер закрывает сокет данных

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

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

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

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

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

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

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

Говард

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top