TipClientFtp causa possível bloqueio no servidor FTP!
Enviado: 06 Fev 2016 10:59
Bom dia!
Tenho um Aplicativo (xHarbour 1.2.1) que faz Upload de pedido e Download do retorno em formato texto. Estou fazendo conexão para duas distribuidoras através da I2 Sofware ltda (i2.com.br), porém, uma delas causa um tipo de bloqueio, e o retorno mesmo sendo gerado pela distribuidora destino não cai na área para download. Então, na pausa programada de 10s entre uma tentativa e outra para pegar o retorno, eu conecto pelo ftp.exe do Windows, entro na pasta, dou "dir" e em seguida "quit", e só então meu Aplicativo consegue baixá-lo e processá-lo!
Já entrei em contato com a Distribuidora várias vezes e não consegui chegar a uma solução, mesmo citando que a outra distribuidora que também usa a i2 funciona perfeitamente. Pretendo também entrar em contato com a i2, porém, não sei se conseguirei ser atendido, uma vez que a relação deles é com as Distribuidoras.
Daí, venho aqui mais uma vez solicitar uma orientação de alguém que passou pela situação descrita acima e/ou tenha alguma dica que possa ajudar a solucioná-la.
Obs: Acredito que talvez falte um comando para "Atualizar" após estar conectado, mas não encontrei!
Att,
Ceb
Tenho um Aplicativo (xHarbour 1.2.1) que faz Upload de pedido e Download do retorno em formato texto. Estou fazendo conexão para duas distribuidoras através da I2 Sofware ltda (i2.com.br), porém, uma delas causa um tipo de bloqueio, e o retorno mesmo sendo gerado pela distribuidora destino não cai na área para download. Então, na pausa programada de 10s entre uma tentativa e outra para pegar o retorno, eu conecto pelo ftp.exe do Windows, entro na pasta, dou "dir" e em seguida "quit", e só então meu Aplicativo consegue baixá-lo e processá-lo!
Já entrei em contato com a Distribuidora várias vezes e não consegui chegar a uma solução, mesmo citando que a outra distribuidora que também usa a i2 funciona perfeitamente. Pretendo também entrar em contato com a i2, porém, não sei se conseguirei ser atendido, uma vez que a relação deles é com as Distribuidoras.
Daí, venho aqui mais uma vez solicitar uma orientação de alguém que passou pela situação descrita acima e/ou tenha alguma dica que possa ajudar a solucioná-la.
Obs: Acredito que talvez falte um comando para "Atualizar" após estar conectado, mas não encontrei!
Código: Selecionar todos
FUNCTION FTP_DOWNLOAD(FTPSERVER, FTPPORTA, FTPUSER, FTPPASS, FTPDIR, ARQFTP, ARQLOCAL, FTPDEL)
Local cUrl, oUrl, oFTP
cUrl := "ftp://" + FTPUSER + ":" + FTPPASS + "@" + FTPSERVER
oUrl := tUrl():New( cUrl )
oFTP := tIPClientFtp():New( oUrl, .F. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
oFTP:nDefaultPort := FTPPORTA
oFTP:oUrl:cUserID := FTPUSER
oFTP:oUrl:cServer := FTPSERVER
oFTP:oUrl:cPassword:= FTPPASS
IF oFTP:Open( cUrl )
aLista:=oFTP:ListFiles('/'+FTPDIR+'/'+ARQFTP)
IF LEN(aLISTA) > 0 //TEM ARQUIVO NO SERVIDOR FTP
oFtp:exGauge := ( @FtpProgress() )
IF oFTP:DownLoadFile(ARQLOCAL,'/'+FTPDIR+'/'+ARQFTP)
IF FTPDEL //SE PEDIU PARA BAIXAR E APAGAR O ARQUIVO
DO WHILE .T.
IF oFTP:DELE('/'+FTPDIR+'/'+ARQFTP) ; EXIT ; ELSE ; LOOP ; ENDIF
ENDDO
ENDIF
oFTP:Close() ; RETURN(.T.)
ELSE
oFTP:Close() ; RETURN(.F.)
ENDIF
ELSE
oFTP:Close() ; RETURN(.F.)
ENDIF
Millisec(1000)
oFTP:Close()
ELSE
RETURN(.F.)
ENDIF
RETURN(.T.)
//
FUNCTION FTP_UPLOAD( FTPSERVER, FTPPORTA, FTPUSER, FTPPASS, FTPDIR, ARQFTP, ARQLOCAL )
Local cUrl, oUrl, oFTP
cUrl := "ftp://" + FTPUSER + ":" + FTPPASS + "@" + FTPSERVER
oUrl := tUrl():New( cUrl )
oFTP := tIPClientFtp():New( oUrl, .t. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
oFTP:nDefaultPort := FTPPORTA
oFTP:oUrl:cUserID := FTPUSER
oFTP:oUrl:cServer := FTPSERVER
oFTP:oUrl:cPassword:= FTPPASS
IF oFTP:Open( cUrl )
oFtp:exGauge := ( @FtpProgress() )
IF oFtp:UploadFile(ARQLOCAL,'/'+FTPDIR+'/'+ARQFTP)
oFTP:Close() ; RETURN(.T.)
ELSE
oFTP:Close() ; RETURN(.F.)
ENDIF
Millisec(1000)
oFTP:Close()
ELSE
RETURN(.F.)
ENDIF
RETURN(.T.)
//
FUNCTION FtpProgress( nSent, nTotal, oFtp )
LOCAL cProgress
LOCAL nRow := Row(), nCol := Col()
cProgress:= STR((nSent/nTotal)*100,4)+"%"
@ nRow,nCol-5 say cProgress
SetPos( MaxRow()-1, 0 )
SetPos( nRow, nCol )
RETURN .T.
//
Ceb