Jump to content

chamada diadoacbr

Assista tectoy.png

Timeout + WinCrypt + 21 Segundos


Data Lider
Go to solution Solved by Daniel Simoes,
  • Este tópico foi criado há 733 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Contexto

UF Espírito Santo
Revisão ACBR 20096
Projeto ACBrNFCe
Configurações SSL WinCrypt
XML MSXML2
{$DEFINE USE_MINGW} Habilitado

O Problema

Espírito Santo, em geral, nos dias de sexta-feira (com maior incidência) tendem a ter tempo de resposta no servidor SVRS bem alto, tempos geralmente acima de 21 segundos, e nós temos acompanhando um número ligações relacionadas a timeout, o que não seria um problema se o servidor não efetivasse a nota mesmo depois do timeout gerando uma duplicidade. Mas porque não entrar em contingência? Acontece que esses picos de timeout costumam serem passageiros e de curta duração, e não exclusivos da sexta-feira, e ficar na contingência não é um cenário ideal, sendo que a internet está sempre disponível.

RS.thumb.png.95fd19a715528d96710a33c6cea07fb6.png

(na imagem acima, painel monitor para o SEFAZ Virtual RS, na última sexta-feira de manhã) (se você entrar nesse painel, não vai ver o ano de 2020, para conseguir visualizar, você precisa injetar o HTML com a opção de 2020)

A Solução (que não está funcionando)

Existem vários tópicos aqui no fórum, explicando sobre onde, como, e porque configurar o timeout, nós fizemos isso, definimos por média 60 segundos, porque era o máximo em condições normais que o servidor registrava, o que em teoria teria resolvido o problema, inclusive gostaria de registrar o seguinte:

function TACBrWinHTTPReqResp.SetConnectionTimeOut: Boolean;

A função WinHttpSetTimeouts estava recebendo o timeout de 60000 normalmente, conforme inspecionado em tempo de depuração. Porém em todas os testes que fizemos, com tempos de timeouts diferentes (60s, 240s e etc..), sempre o cronometro para em 21 segundos. Os testes foram realizados conforme vídeo do DANEL testando o timeout adicionando uma porta ao final das URL existentes no arquivo INI da ACBRNFe.

MEDIA4.thumb.png.6e62a47555020892f35e7d6e7bf2c940.png

(Exemplo do INI)

Media1.png.03e533111815b6d16c0f9d0e40bf20fa.png

(Pontos de verificação no WinHttpSendRequest, caso alguém for realizar os testes)
C:\DL\T\ac\Fontes\ACBrTCP\ACBrWinHTTPReqResp.pas

O "Possível" por quê

Pesquisando sobre "Timeout" + "WinHttpSendRequest" encontrei um tópico justamente a respeito disso na MSDN americana, porém quem respondeu (segundo o autor) trabalhava no time de rede do Windows, dizendo:

MEDIA3.thumb.png.56eecd07617704f650a5baba82cc4800.png

Segundo ele (se eu entendi bem), o uso de timeouts está descontinuado, e que não existe nenhum parte exposta via a API do WinHTTP para controlar esses tempos de troca de pacotes explicitados por ele na resposta. (Link Original Aqui)

OpenSSL: A Solução (que funciona em partes)

Os mesmos testes feitos com a OpenSSL funcionam corretamente, o timeout é respeitado conforme informado e com precisão, porém temos o problema dos certificados A3, logo as pessoas com certificado A3 continuariam com o problema.

MEDIA2.png.58526fece4dc5a1cbf88cfdbfbf29044.png

(Pontos de verificação na unit HTTP da OpenSSL, caso alguém for realizar os testes)
C:\DL\T\ac\Fontes\ACBrDFe\ACBrDFeHttpOpenSSL.pas

Em quanto terminava de escrever esse tópico senti a necessidade de testar na DEMO da ACBr diretamente, sem o Mingw, por segurança, e o mesmo ocorreu, porém no nosso programa testamos com envio da nota em homologação, e na demo com o status.

A Pergunta

Teria como alguém realizar os mesmos testes para confirmar isso? Existe alguma solução para A3 que não a Capicom e a WinCrypt? Alguém já passou por isso, e conseguiu uma solução?

 

 

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link to comment
Share on other sites

  • Fundadores
  • Solution

Existem várias situações possíveis de Erro de TimeOut... e realmente o Sistema Operacional, pode interferir...

Verifique ainda a propriedade TimeOutPorThread, na qual o próprio ACBR irá abandonar a conexão, quando o TimeOut ocorrer...

Mas pelo que você descreveu.. você não está tratando corretamente as situações de TimeOut...  e acionamento de Off-line

O fato do TimeOut ocorrer, não significa que o XML não foi entregue ao servidor... a lentidão poderia esta no caminho da resposta do XML, por exemplo...

Sempre que houver erro de TimeOut... você PRECISA consultar no SEFAZ, o Status do documento onde ocorreu o TimeOut...
Se ele existir no SEFAZ, você deve cancelar, pois essa Nota já foi tributada, pela nota emitida em contingência...

Aqui há uma coletânea de tópicos e vídeos, sobre esse assunto:

 

  • Thanks 1
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.

Link to comment
Share on other sites

2 minutos atrás, Daniel Simoes disse:

Existem várias situações possíveis de Erro de TimeOut... e realmente o Sistema Operacional, pode interferir...

Verifique ainda a propriedade TimeOutPorThread, na qual o próprio ACBR irá abandonar a conexão, quando o TimeOut ocorrer...

Mas pelo que você descreveu.. você não está tratando corretamente as situações de TimeOut...  e acionamento de Off-line

O fato do TimeOut ocorrer, não significa que o XML não foi entregue ao servidor... a lentidão poderia esta no caminho da resposta do XML, por exemplo...

Sempre que houver erro de TimeOut... você PRECISA consultar no SEFAZ, o Status do documento onde ocorreu o TimeOut...
Se ele existir no SEFAZ, você deve cancelar, pois essa Nota já foi tributada, pela nota emitida em contingência...

Aqui há uma coletânea de tópicos e vídeos, sobre esse assunto:

 

Obrigado pela resposta, mas no caso, como o servidor está com o timeout acima de 21, não funcionaria o cancelamento também, e nem a verificação do status, ficaria para um tratamento posterior então?

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link to comment
Share on other sites

  • Fundadores

Quando você está Off-Line... está em Off-line... não tem consulta...

Depois de algum tempo, quando sua aplicação detectar que é seguro para voltar para On-Line... Apenas nesse momento, você deve tratar todas as pendências... (veja os vídeos no Post que indiquei)

  • Thanks 1
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.

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.