Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao carregar Digest: sha1 esporádico e na primeira tentativa de emissão


Ver Solução Respondido por Próton Sistemas,
  • Este tópico foi criado há 703 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

A aplicação costuma subir essa exceção no método abaixo:

{ Método clonado de ACBrEAD }
function TDFeOpenSSL.CalcHash(const AStream: TStream; const Digest: TSSLDgst;
  const Assina: Boolean): AnsiString;

Ainda não consegui determinar um padrão, mas me parece que é sempre na primeira tentativa de emitir alguma NFCe (ou consulta) e não são todas as vezes que inicializa a aplicação. Isso acontece tanto em ambiente de produção, quanto de qualidade/testes (eu logo todos os erros). A aplicação se recupera normalmente do problema, mas me incomoda não saber a causa além da qualidade de sujeira que isso gera no log da aplicação.

As dlls ficam na pasta da aplicação (openSSL e cia) e tudo funciona normalmente depois. O tópico é só para saber se alguém passa por isso e se conseguiu resolver. Imagino que na prática isso pode tá levando a minha aplicação a fazer emissões em contingência sem necessidade ou mesmo gerando outros problemas indiretamente.

saudações,

Rafael

Link para o comentário
Compartilhar em outros sites

  • Moderadores
10 horas atrás, ProtonSistemas disse:

A aplicação costuma subir essa exceção no método abaixo:

{ Método clonado de ACBrEAD }
function TDFeOpenSSL.CalcHash(const AStream: TStream; const Digest: TSSLDgst;
  const Assina: Boolean): AnsiString;

Ainda não consegui determinar um padrão, mas me parece que é sempre na primeira tentativa de emitir alguma NFCe (ou consulta) e não são todas as vezes que inicializa a aplicação. Isso acontece tanto em ambiente de produção, quanto de qualidade/testes (eu logo todos os erros). A aplicação se recupera normalmente do problema, mas me incomoda não saber a causa além da qualidade de sujeira que isso gera no log da aplicação.

As dlls ficam na pasta da aplicação (openSSL e cia) e tudo funciona normalmente depois. O tópico é só para saber se alguém passa por isso e se conseguiu resolver. Imagino que na prática isso pode tá levando a minha aplicação a fazer emissões em contingência sem necessidade ou mesmo gerando outros problemas indiretamente.

saudações,

Rafael

Uma dúvida. tentou pegar o exemplo do svn e configurar igual e emitir com ele para verificar se ocorre?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Pelo que analisei rapidamente o problema é que minha aplicação usa o ACBr na thread principal e em outra thread. Se os dois chamarem esse método simultaneamente ocorre o problema a primeira vez. Acredito que a biblioteca openSSL ainda não tenha carregado. Coloquei um delay na thread para só começar depois que a principal inicializar. Depois disso, parou de ocorrer o problema.

Rafael.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
9 minutos atrás, ProtonSistemas disse:

Pelo que analisei rapidamente o problema é que minha aplicação usa o ACBr na thread principal e em outra thread. Se os dois chamarem esse método simultaneamente ocorre o problema a primeira vez. Acredito que a biblioteca openSSL ainda não tenha carregado. Coloquei um delay na thread para só começar depois que a principal inicializar. Depois disso, parou de ocorrer o problema.

Rafael.

há sim. verdade pois vão tentar acessar o certificado e o arquivo pfx será o mesmo.

obrigador por compartilhar conosco a solução

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Não me parece que o problema é o acesso ao certificado digital. Na primeira tentativa de uso do openSSL o sistema ainda vai carregar as DLLs. Depois de carregadas o sistema testa a variável abaixo:

    md := EVP_get_digestbyname( NameDgst );
    if md = Nil then
      raise EACBrDFeException.Create('Erro ao carregar Digest: '+NameDgst);

Neste caso eu só fiz garantir que na PRIMEIRA vez uma só thread execute até o final para finalizar o carregamento do openSSL (das DLLs). Depois disso, elas podem concorrer a vontade que não verifiquei problemas.

Rafael.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
1 hora atrás, ProtonSistemas disse:

Não me parece que o problema é o acesso ao certificado digital. Na primeira tentativa de uso do openSSL o sistema ainda vai carregar as DLLs. Depois de carregadas o sistema testa a variável abaixo:

    md := EVP_get_digestbyname( NameDgst );
    if md = Nil then
      raise EACBrDFeException.Create('Erro ao carregar Digest: '+NameDgst);

Neste caso eu só fiz garantir que na PRIMEIRA vez uma só thread execute até o final para finalizar o carregamento do openSSL (das DLLs). Depois disso, elas podem concorrer a vontade que não verifiquei problemas.

Rafael.

então olha se no ACBr no instalador não tá marcado para fazer carga tardia das dll´s

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Administradores

Tópico movido para a área do SAC, para que o SLA de respostas seja considerado

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

×
×
  • 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.