Pergunta

EDITAR:Aprendi que Webmethods realmente usa NLST, não LIST, se isso importa

Nosso negócio usa o servidor de integração WebMethods para lidar com a maioria de nossas comunicações de saída, e sua funcionalidade FTP deixa a desejar.Estamos tendo um problema que pode ser específico do WebMethods, mas se alguém puder me indicar quais tipos de coisas podem causar isso, eu agradeceria.

Ao pesquisar dois servidores FTP de nossos parceiros, nos conectamos sem problemas, mas, ao fazer um NLST em um diretório que está vazio (sem arquivos e sem subdiretórios), o tempo limite está esgotado.O erro real é:

com.wm.net.ftpCExceção:[ISC.0064.9010] java.net.SocketTimeoutException:Aceitar expirou

Está sendo lançado durante a invocação do serviço pub.client.ftp:ls.Efetuei login com vários clientes FTP sem problemas nos mesmos sites.Eu usei qualquer cliente FTP padrão no Windows, FileZilla e lftp.Tudo sem problemas.Os próprios servidores não são o mesmo software de servidor FTP, pelo que posso dizer.Um é o Microsoft FTP, o outro não tenho certeza, mas definitivamente não é a Microsoft.

Alguma idéia do que poderia causar o tempo limite de um cliente FTP ao aguardar uma resposta NLST em um diretório vazio?As respostas visíveis do servidor FTP parecem ser as mesmas, mas há alguma diferença na forma como o NLST responde a um diretório vazio que eu não conheço?

Esse problema é consistente nesses dois servidores.Tudo funciona bem em diretórios com arquivos ou subdiretórios dentro dele, mas não quando vazios.

Quaisquer pensamentos ou instruções serão apreciados.

Obrigado!

Eric Sipple

Foi útil?

Solução

Eu tentei isso nas atualizações do WebMethods IS versão 6.5 WmPRT_6-5-1_SP1, IS_6-5_SP3.

Funcionou perfeitamente na primeira vez.

Ativei a depuração no servidor FTP (ftpd padrão do Debian).O NLST do WebMethods respeita o parâmetro ativo/passivo passado para ele.

Não há nada de especial no comando NLST, nem em seu comportamento correto com um diretório vazio - se LIST funcionar, RETR, STOR e NLST também deveriam funcionar.Se o NLST funcionar com um diretório não vazio, deverá funcionar com um diretório vazio.

Então, meu palpite é que:

  • Sua versão do WM tem um bug, a minha não
  • Seu servidor FTP tem um bug, o meu não
  • Há um firewall maluco com reconhecimento de protocolo em seu sistema que não gosta de soquetes de dados FTP sem dados neles.

Os fornecedores de firewall são um pouco rebeldes quando se trata de FTP...Ao testar com outros clientes, certifique-se de que seja da mesma máquina em que o WebMethods Integration Server está sendo executado.

Só para constar, aqui está o que deve acontecer para um NLST ativo

  • o cliente abre um soquete de escuta e envia um comando PORT com os detalhes desse soquete
  • cliente envia comando NLST
  • o servidor se conecta ao soquete de escuta do cliente (este é o soquete de dados)
  • servidor transmite listagem por soquete de dados (neste caso, zero bytes)
  • servidor fecha soquete de dados

...e no modo passivo

  • cliente envia comando PASV
  • servidor abre um soquete de escuta e responde com uma resposta PASV contendo seus detalhes
  • o cliente se conecta ao soquete de escuta (este é o soquete de dados)
  • cliente envia comando NLST
  • servidor transmite listagem por soquete de dados (zero bytes novamente)
  • servidor fecha soquete de dados

Outras dicas

Não tenho certeza se era o mesmo problema, mas tive sintomas semelhantes há algum tempo usando outro cliente FTP em Java (commons.net).O problema acabou sendo causado pelo modo ativo/passivo da conexão.Lamento não poder dar mais detalhes, é tudo que me lembro...espero que ajude.

Guillermo Vasconcelos acertou na resposta.Existem dois modos de FTP, Ativo e Passivo.O padrão FTP modo está ativo.Ativo requer que o servidor se conecte novamente ao cliente em alguma porta TCP/IP.Isso não funciona com firewalls porque é provável que esta porta esteja bloqueada ou se você estiver atrás de um roteador com NAT, não mapeado.

Se você usar o modo Passivo (PASV), não deverá pegar o jeito.

Vou fazer alguns novos testes com as configurações passivas amanhã, quando a manutenção for feita aqui, mas não tenho certeza se esse é o problema.Podemos obter uma listagem de diretórios se houver arquivos ou subdiretórios nesse diretório.Ele só falha quando o diretório em que estamos fazendo NLST está vazio.

A diferença ativo/passivo se manifestaria apenas para um diretório vazio ou existe outra possibilidade?

O FTP requer que a porta especificada e a porta acima dela sejam abertas através do firewall.Quando tive problemas com o tempo limite do webMethods, foi porque o firewall não estava com a porta de retorno aberta.

Howard

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top