Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2564 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde

Fiz várias pesquisas no fórum sobre o assunto de Timeout, mas não obtive sucesso.

Segui as dicas desse post

Configurei o meu componente dessa forma

AcbrNfce.Configuracoes.WebServices.TimeOut                  := 15000; // tempo de timeout, coloque um tempo maior para resolver problemas
AcbrNfce.Configuracoes.WebServices.AguardarConsultaRet      := 5000;  // tempo padrão que vai aguardar para consultar após enviar a NF-e
AcbrNfce.Configuracoes.WebServices.IntervaloTentativas      := 3000;  // Intervalo entre as tentativas de envio
AcbrNfce.Configuracoes.WebServices.Tentativas               := 10;    // quantidade de tentativas de envio
AcbrNfce.Configuracoes.WebServices.AjustaAguardaConsultaRet := True;

 

Mesmo assim, quando a conexão é lenta ou fica oscilando entre dois ou mais links de internet, ocorre demora, chegando a dar retorno após vários minutos.

Existe alguma forma de fazer com que o componente aguarde apenas 10 ou 15 segundos e prossiga caso não haja retorno ?

Desde já agradeço a atenção.

  • Membros Pro
Postado
8 minutos atrás, Turbo Drive disse:

Boa tarde

Fiz várias pesquisas no fórum sobre o assunto de Timeout, mas não obtive sucesso.

Segui as dicas desse post

Configurei o meu componente dessa forma


AcbrNfce.Configuracoes.WebServices.TimeOut                  := 15000; // tempo de timeout, coloque um tempo maior para resolver problemas
AcbrNfce.Configuracoes.WebServices.AguardarConsultaRet      := 5000;  // tempo padrão que vai aguardar para consultar após enviar a NF-e
AcbrNfce.Configuracoes.WebServices.IntervaloTentativas      := 3000;  // Intervalo entre as tentativas de envio
AcbrNfce.Configuracoes.WebServices.Tentativas               := 10;    // quantidade de tentativas de envio
AcbrNfce.Configuracoes.WebServices.AjustaAguardaConsultaRet := True;

 

Mesmo assim, quando a conexão é lenta ou fica oscilando entre dois ou mais links de internet, ocorre demora, chegando a dar retorno após vários minutos.

Existe alguma forma de fazer com que o componente aguarde apenas 10 ou 15 segundos e prossiga caso não haja retorno ?

Desde já agradeço a atenção.

Boa tarde

Vc usa Capicom ou OpenSSL ?  

Modo síncrono ou assíncrono ?

 

  • Membros Pro
Postado

No final do ano passado enfrentei problemas com relação a demora para receber o retorno de "sem conexão". 

No meu caso tinha duas coisas bem distintas:

 

1 - Recebia problema de conexão  mesmo quando elas não existiam, ou seja, a internet estava super estável e mesmo assim, cerca de 10 % das NFCe emitidas no dia entravam em contingência por problemas de conexão.

2 - a demora para receber o retorno de falha de conexão.

Quanto ao problema de falha de conexão, recebi uma grande ajuda do Daniel na época e chegamos a conclusão que faltava alimentar uma propriedade (ConectionTimeOut) no fonte do acbr no momento do envio. Essa alteração foi feita no ACBR mais ou menos em Dezembro de 2016 (não me recordo direito) e visa respeitar o tempo definido na propriedade TimeOut do definida no ACBR. Com essa alteração, se vc definir 10 seg no Time Out, o erro de problemas de conexão vai retornar em 10 seg e não mais vai demorar minutos para retornar. Nesse caso, bastaria vc atualizar o ACBR para a versão mais recente para resolver esse problema.

 

Sobre o problema de retornar falha de comunicação mesmo sem que ela realmente exista, fiz uma alteração no meu sistema. Eu utilizara o Componente em um DataModeule carregado em memória. Passei a usar o componente em um Formulário normal e destruir e criar  o mesmo no final de cada envio. Fazendo isso, pararam de dar os problemas de falta de conexão (exceto quando está sem internet mesmo).

Gostaria de deixar bem claro que o fato de não funcionar no DataModule foi uma experiênica que tive aqui, não quero dizer que o ACBR não funciona dessa forma. Apenas para mim funcionou melhor criando e destruindo o formulário onde está o componente a cada envio.

Espero ter ajudado..

Abraço..

  • Curtir 1
  • Membros Pro
Postado
32 minutos atrás, Turbo Drive disse:

Onde e como devo configurar a propriedade ConectionTimeOut ?

 

Grato pela atenção.

Voce Não precisa configurar essa propriedade. Conforme citei no post anterior, isso já foi feito pelo Daniel no final do ano passado. Vc só precisa configurar a propriedade : 

AcbrNfce.Configuracoes.WebServices.TimeOut

Lembrando sempre que vc está usando o modo Síncrono.. Se for Assíncrono ai tem mais um monte de propriedades..

 

Postado

Infelizmente, mesmo setando

AcbrNfce.Configuracoes.WebServices.TimeOut                  := 15000;

Estou tendo demora de vários minutos, ao invés de 15 segundos.

Atualizei meus fontes no início de abril desse ano.

  • Membros Pro
Postado
26 minutos atrás, Turbo Drive disse:

Infelizmente, mesmo setando

AcbrNfce.Configuracoes.WebServices.TimeOut                  := 15000;

Estou tendo demora de vários minutos, ao invés de 15 segundos.

Atualizei meus fontes no início de abril desse ano.

Em homologação vc tb tem essa demora ?

 

  • Fundadores
Postado
6 horas atrás, Turbo Drive disse:

Infelizmente, mesmo setando

AcbrNfce.Configuracoes.WebServices.TimeOut                  := 15000;

Estou tendo demora de vários minutos, ao invés de 15 segundos.

Atualizei meus fontes no início de abril desse ano.

Só funcionará se você usar  httpWinHttp, ou httpOpenSSL

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Boa tarde.

Atualizei os fontes ontem, e configurei o componente da seguinte forma:

SSLLib       := libWinCrypt;
CryptLib     := CryWinCrypt;
HttpLib       := HttpWinHttp;
XMLSignLib  := xsMsXML;

Também dei uma olhada em alguns tópicos, incluindo o Bye Bye Capicom, mas infelizmente não obtive o resultado esperado.

A situação que ocorre no cliente é a seguinte: Lá ele possui dois links de internet, chamemos de Internet A e Internet B.

A internet A, possui link de 30 MB e a Internet B um link de 8 MB. Quando a internet A cai, a internet B assume, e ao normalizar, a Internet A retoma. Acredito que o problema esteja nessa troca de links.

Estou tentando reproduzir a situação que ocorre lá, baixando a minha conexão a 2 kb (isso mesmo, dois kilobytes).

Após a atualização dos fontes, no primeiro teste, tive o retorno 12002 após 20 segundos. Ao tentar novamente, tive o mesmo retorno após 3 ou 4 min, e nos testes seguintes, o tempo de retorno ocorriam de forma intermitente, algumas vezes em segundos e algumas vezes em minutos.

Estou tentando colocar o comando Enviar dentro de uma thread e caso não haja um retorno dentro de 20 segundos, executo o terminate da Thread e finalizo a NFC-e em modo contingência. Mesmo utilizando syncronize e variáveis globais, não estou conseguindo capturar os retornos do comando Enviar antes do comando terminate, mesmo que a NFC-e seja enviada antes de 20 segundos.

Existe alguma forma de barrar ou interromper o comando Enviar do Acbr, caso o processo ultrapasse 20 segundos ?

Ou os colegas teriam alguma sugestão de como obter um retorno do componente dentro dos 20 segundos ?

Desde já agradeço a todos pela ajuda.

Postado

Boa tarde @Turbo Drive não sei se vai te ajudar mas faz um teste vale a pena tentar, ja tive problemas parecidos com esses balanceadores de Link mas com outros tipo  de serviço, a solução que encontramos foi dar uma limpada no cache DNS do sistema operacional após a falha.

utilize a função WinExec com ( ipconfig /flushdns )

att.

 

  • Curtir 1
Postado

Bom dia

Obrigado @PauloH-Gtb pela dica do flushdns, fiz uns testes com esse comando em laboratório, o qual foi bastante útil.

Em todo caso, gostaria de tentar fazer o controle do retorno em minha aplicação de forma que não necessite dessa intervenção externa do usuário.

Postado

Bom dia @Turbo Drive faz o seguinte se tu quiser coloque essa linha caso seja disparada a exceção

WinExec(PChar('ipconfig /flushdns'),SW_HIDE);

ela vai ser executada sem a necessidade de intervenção do usuário, se quiser que o cmd apareça na tela mude o parâmetro, SW_HIDE para SW_NORMAL.

att. 

Postado
Em 16/04/2017 at 12:12, Turbo Drive disse:

Boa tarde.

Atualizei os fontes ontem, e configurei o componente da seguinte forma:

SSLLib       := libWinCrypt;
CryptLib     := CryWinCrypt;
HttpLib       := HttpWinHttp;
XMLSignLib  := xsMsXML;

Também dei uma olhada em alguns tópicos, incluindo o Bye Bye Capicom, mas infelizmente não obtive o resultado esperado.

A situação que ocorre no cliente é a seguinte: Lá ele possui dois links de internet, chamemos de Internet A e Internet B.

A internet A, possui link de 30 MB e a Internet B um link de 8 MB. Quando a internet A cai, a internet B assume, e ao normalizar, a Internet A retoma. Acredito que o problema esteja nessa troca de links.

Estou tentando reproduzir a situação que ocorre lá, baixando a minha conexão a 2 kb (isso mesmo, dois kilobytes).

Após a atualização dos fontes, no primeiro teste, tive o retorno 12002 após 20 segundos. Ao tentar novamente, tive o mesmo retorno após 3 ou 4 min, e nos testes seguintes, o tempo de retorno ocorriam de forma intermitente, algumas vezes em segundos e algumas vezes em minutos.

Estou tentando colocar o comando Enviar dentro de uma thread e caso não haja um retorno dentro de 20 segundos, executo o terminate da Thread e finalizo a NFC-e em modo contingência. Mesmo utilizando syncronize e variáveis globais, não estou conseguindo capturar os retornos do comando Enviar antes do comando terminate, mesmo que a NFC-e seja enviada antes de 20 segundos.

Existe alguma forma de barrar ou interromper o comando Enviar do Acbr, caso o processo ultrapasse 20 segundos ?

Ou os colegas teriam alguma sugestão de como obter um retorno do componente dentro dos 20 segundos ?

Desde já agradeço a todos pela ajuda.

Olá Turbo drive, gostaria de saber se a thread que vc está usando é implementada por você mesmo ou está usando a classe presente no delphi? Dependendo da sua versão utilizada existe a nova classe System.Threading com a subclasse ITask que já estou utilizando com sucesso conseguindo inclusive os retornos normalmente. A diferença na velocidade da execução é significativa e nos erros de timeout, embora o componente ACBR crio e destruo em tempo de execução e não uso no DataModule.

Espero ter ajudado...

  • 6 meses depois ...
Postado

Aqui no Ubuntu demorou mais de 1 minuto...

[18:07:17] Gerando XML...
Enviando para a SEFAZ...
[18:08:32] Exception:
Erro Interno: 1
Erro HTTP: 500

E minhas configurações estão assim:

      Geral.SSLCryptLib := cryOpenSSL;
      Geral.SSLHttpLib := httpOpenSSL;
      Geral.SSLLib := libOpenSSL;
      Geral.SSLXmlSignLib := xsXmlSec;
      WebServices.Tentativas := 1;
      WebServices.TimeOut := 2000;

Alguma sugestão?

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

  • Este tópico foi criado há 2564 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.