Boa tarde, alguém com problemas para enviar eventos da NFe através do componente ACBrNFE utilizando certificado A3? estamos enfrentando um caso bizarro aqui onde se não ativar o TimeOutPorThread do ACBrDFeSSL o componente fica travado por horas esperando uma resposta.
O erro ocorre na unit ACBrDFeSSL no trecho de código a partir da linha 1405:
if TimeOutPorThread then
begin
EndTime := IncSecond(now,TruncFix(TimeOut/1000));
SendThread := TDFeSendThread.Create( Self,
TDFeSSLHttpClassOf(FSSLHttpClass.ClassType),
ConteudoXML, AURL, ASoapAction, AMimeType);
try
while (not SendThread.Done) and (Now <= EndTime) do
Sleep(50);
finally
Result := SendThread.Response;
ErrorMsg := SendThread.ExceptMessage;
if not SendThread.Done then
SendThread.Abort // Isso forçará a Thread terminar, e morrer por si...
else
SendThread.Free;
end;
if not EstaVazio(ErrorMsg) then
raise EACBrDFeException.Create('Erro na thread de envio: ' + ErrorMsg);
if EstaVazio(Result) then
raise EACBrDFeException.Create('Timeout - Não foi possível obter a resposta do servidor');
end
else
begin
FHttpSendCriticalSection.Acquire;
try
Result := FSSLHttpClass.Enviar(ConteudoXML, AURL, ASoapAction, AMimeType, AAuthorizationHeader);
finally
FHttpSendCriticalSection.Release;
end;
end;
No caso, se ativarmos o TimeOutPorThread através da seguinte configuração:
ACBrNFe.Configuracoes.WebServices.TimeOutPorThread := True;
o componente, após 5 segundos, retorna um erro de timeout e finalmente pede o PIN do token, após informarmos o PIN, todas as requisições são enviadas normalmente pelo componente.
Se não ativarmos tal configuração, o componente fica travado e nunca pede o PIN, porém, só com o PIN ele vai conseguir fazer as requisições...
Alguém tem alguma ideia do que pode ser? Isso não acontece em todas as máquinas, na minha por exemplo, funciona normalmente, porém, na máquina de outro colega acontece também.
Anexo coloquei um relatório de erros que o componente retorna quando ativamos o TimeOut, caso seja necessário...
erro.txt