Bom dia a todos.
Tenho um serviço de Windows que executa determinadas funções em horários específicos. Um desses serviços e a Distribuição DFe por último NSU que funciona perfeitamente dentro de uma TThread (rotina retirada de curso do ACBr).
O problema é que eu implementei a Manifestação (Ciência, Confirmação...) no serviço também, respondendo a um Método externo onde é passado um JSon via verbo POST contendo (Lote, Chaves, CNPJ e o tipo de evento de cada chave), mas o sistema trava no momento em que o evento é enviado (ACBrNFe1.EnviarEvento(FLote)), ate dar tempo limite esgotado no Metodo. E se eu chamo o evento via Postman fica o dia todo esperando a resposta.
JSon do Método:
[
{
"lote": 1,
"chaves": [
{
"id": 1,
"chNfe": "32240433009911001704550260013106541768710493",
"cnpj": "33009911001701",
"tpEvento": "ciencia",
"dtEvento": ""
},
{
"id": 2,
"chNfe": "32240433009911001704550260013106541768710494",
"cnpj": "27151620000182",
"tpEvento": "confirma",
"dtEvento": ""
}
]
}
]
Código delphi:
if Assigned(FChave_JSon) then
begin
ACBrNFe1.EventoNFe.Evento.Clear;
for J := 0 to (FChave_JSon.Size - 1) do
begin
FChNFe := FChave_JSon[J].GetValue<String>('chnfe','');
FCnpj := FChave_JSon[J].GetValue<String>('cnpj','');
FTpEvento := FChave_JSon[J].GetValue<String>('tpevento','');
fDtEvento := FChave_JSon[J].GetValue<String>('dtevento','');
SalvarLog(FChNFe + ' - ' + FCnpj + ' - ' + FTpEvento + ' - ' + fDtEvento,1,FEnderLog);
{$Region 'Adicionando as chaves ao lote'}
with ACBrNFe1.EventoNFe.Evento.New do
begin
InfEvento.cOrgao := 91;
InfEvento.chNFe := FChNFe;
InfEvento.CNPJ := FCnpj;
InfEvento.dhEvento := Now;
if FTpEvento = 'ciencia' then
InfEvento.tpEvento := teManifDestCiencia
else if FTpEvento = 'confirma' then
InfEvento.tpEvento := teManifDestConfirmacao
else if FTpEvento = 'desconhece' then
InfEvento.tpEvento := teManifDestDesconhecimento
else if FTpEvento = 'nrealizada' then
begin
InfEvento.tpEvento := teManifDestOperNaoRealizada;
InfEvento.detEvento.xJust := fDtEvento;
end;
end;
{$EndRegion 'Adicionando as chaves ao lote'}
end;
ACBrNFe1.EnviarEvento(FLote);
with ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento do
begin
SalvarLog('cStat ' + cStat.ToString,1,FEnderLog);
if cStat = 135 then
Codigo := 200
else
Codigo := 500;
Mensagem := Mensagem + '[';
Mensagem := Mensagem + '{';
Mensagem := Mensagem + '"cStat":'+cStat.ToString+',';
Mensagem := Mensagem + '"retorno": [';
Mensagem := Mensagem + '{';
Mensagem := Mensagem + '"id":"'+Id+'",';
Mensagem := Mensagem + '"tpAmb":"'+TpAmbToStr(tpAmb)+'",';
Mensagem := Mensagem + '"verAplic":"'+verAplic+'",';
Mensagem := Mensagem + '"cOrgao":"'+IntToStr(cOrgao)+'",';
Mensagem := Mensagem + '"cStat":"'+IntToStr(cStat)+'",';
Mensagem := Mensagem + '"xMotivo":"'+xMotivo+'",';
Mensagem := Mensagem + '"chNFe":"'+chNFe+'",';
Mensagem := Mensagem + '"tpEvento":"'+TpEventoToStr(tpEvento) +'",';
Mensagem := Mensagem + '"xEvento":"'+xEvento+'",';
Mensagem := Mensagem + '"nSeqEvento":"'+IntToStr(nSeqEvento)+'",';
Mensagem := Mensagem + '"CNPJDest":"'+CNPJDest+'",';
Mensagem := Mensagem + '"emailDest":"'+emailDest+'",';
Mensagem := Mensagem + '"dhRegEvento":"'+DateTimeToStr(dhRegEvento)+'",';
Mensagem := Mensagem + '"nProt":"'+nProt+'"';
Mensagem := Mensagem + '}';
Mensagem := Mensagem + ']';
Mensagem := Mensagem + '}';
Mensagem := Mensagem + ']';
SalvarLog(Mensagem,1,FEnderLog);
end;
end
else
begin
raise Exception.Create('JSon com as chaves não informadas');
end;