Fórum Controlar idftp #285817

23/06/2005

0

Olá amigos,
eu tenho um desafio pra vcs que pra mim já se entende por alguns dias, o problema é o seguinte existem 5 lojas sendo 4 filiais e uma matriz e esta terá que conter os dados de todas as lojas, ai eu tive a idéia de cada loja mandar a cada x tempo um arq com os dados dela para um ftp e deixaria um programa na filial que iria procurar esse arq no ftp para poder atualizar na base de dados até ai nenhum problema o que pega é que o programa fica lendo o ftp procurando o arq a cada x tempo ele começa bem procura o aqr acha o arq faz todo o trabalho de atualizaçao porém chega um momento que ele dá um erro de readtimeout, dá a impressão de ele não está mas se conectando com o ftp, alguém sabe como que eu posso controlar isso? eu ainda não entendi como que se usa a propriedade readtimeout, alguem ai poderia me ajudar com isso?
Desde de já agradeço


Lucianoiron

Lucianoiron

Responder

Posts

23/06/2005

Massuda

Sobre o ReadTimeout... como você está conectado via internet, esse valor não pode ser muito pequeno; o default é zero, que significa sem timeout. Se você quiser definir um valor para ele, acho que seria aconselhável começar com um valor alto (exemplo: 60000 = 1 minuto) e tentar ir ajustando conforme sua aplicação.

A ocorrência da exceção EIdReadTimeout indica que a espera por dados ultrapassou o limite ajustado em ReadTimeout.

Note que isso pode ocorrer se o servidor interromper sua conexão. Alguns servidores FTP não permitem longos períodos de conexão e/ou desconectam se detectarem ociosidade na conexão. Você só irá perceber a desconexão se tentar enviar algo para o servidor (esse problema é inerente a toda comunicação via TCP/IP). Para evitar isso, o melhor é conectar apenas quando for realmente utilizar o servidor FTP (estou assumindo que você não tem controle sobre o servidor).

Com relação a sua aplicação, tem um ponto que pode ser melhorado.

Existe a possibilidade de, num dado instante, a filial tentar atualizar um arquivo enquanto a matriz tenta ler o arquivo.

No caso do upload, o melhor é a filial fazer upload dos dados em um arquivo temporário e somente após completar o upload, deletar o arquivo no servidor e renomear o arquivo temporario. Um outra estratégia boa é não utilizar um nome de arquivo fixo, mas sim adotar um padrão sequencial de modo que a matriz possa apagar os arquivos após baixá-los; isso evita perder arquivos da filial bem como evita tentar atualizar um arquivo enquanto a matriz está lendo o arquivo.


Responder

Gostei + 0

23/06/2005

Lucianoiron

entao massuda esse lance do upload eu já faço, e qto ao readtimeout eu não entendi o que vc quis dizer sobre ter controle sobre o servidor?, e eu já defino o read timeout como 300000 = 5 minutos


Responder

Gostei + 0

23/06/2005

Massuda

[quote:cd9ea11158=´L U C I A N O I R O N´]...eu não entendi o que vc quis dizer sobre ter controle sobre o servidor?, [/quote:cd9ea11158]Eu quis dizer que você tem controle sobre o servidor (de FTP) quando é você quem administra a máquina onde roda o servidor (de FTP). No seu caso, fiquei com a impressão que o servidor é de terceiros.

[quote:cd9ea11158=´L U C I A N O I R O N´]...e eu já defino o read timeout como 300000 = 5 minutos[/quote:cd9ea11158]Ainda acho que você está sendo desconectado do servidor; tem as duas possibilidades de ser desconectado que citei (exceder tempo conectado e conexão ociosa).

Você pode fazer uma experiência usando um programa de FTP comum simulando seu programa e ver o que acontece. Um programa bom para testar é o [url=http://sourceforge.net/projects/filezilla/]FileZilla[/url].


Responder

Gostei + 0

23/06/2005

Lucianoiron

eu tbm achoo que possa ser excesso de tempo conectado e conexão ociosa, vc sabe como eu poderia tratar isso?


Responder

Gostei + 0

23/06/2005

Massuda

[quote:45f573e81a=´L U C I A N O I R O N´]... vc sabe como eu poderia tratar isso?[/quote:45f573e81a]Para evitar conexão ociosa, mande periodicamente um comando inócuo; usando o Indy, você pode executar quando estiver ocioso os métodos Noop, RetrieveCurrentDir e ResumeSupported, entre outros.

Com relação a ser desconectado por exceder o tempo máximo de conexão, você pode conectar apenas quando for necessário ou aproveitar a técnica descrita para evitar a conexão ociosa; nesse caso, quando você tentar enviar um comando e perceber que foi desconectado (o Indy gerará uma exceção), basta tentar conectar novamente.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar