Fórum Controlar idftp #285817
23/06/2005
0
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
Curtir tópico
+ 0Posts
23/06/2005
Massuda
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.
Gostei + 0
23/06/2005
Lucianoiron
Gostei + 0
23/06/2005
Massuda
[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].
Gostei + 0
23/06/2005
Lucianoiron
Gostei + 0
23/06/2005
Massuda
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)