Ir para conteúdo
  • Cadastre-se

dev botao

Dúvida sobre Critical Section em método de envio (TDFeSSL)


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

Recommended Posts

Olá!

Gostaria de entender/saber o motivo de existir um Critical Section no método TDFeSSL.Enviar. Segue trecho do código:

      HttpSendCriticalSection.Acquire;
      try
        Result := FSSLHttpClass.Enviar(ConteudoXML, AURL, ASoapAction, AMimeType);
      finally
        HttpSendCriticalSection.Release;
      end;

Da forma como está não é possível realizar envios simultâneos. Questiono isso pois tenho clientes que possuem muitos PDVs realizando vendas simultaneamente e acaba criando um gargalo de envios, pois um fica aguardando o outro, afetando também o timeout de resposta.

Existe a possibilidade de remover esse Critical Section ou é alguma limitação/problema que ainda precisa ser resolvido? Se alguém puder me dar maiores detalhes, agradeço.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Isso é usando para fazer o TimeOutPorThread...

Desabilite essa propriedade, que esse código não será executado...

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 para o comentário
Compartilhar em outros sites

  • Fundadores

 

35 minutos atrás, rhuanrc disse:

Questiono isso pois tenho clientes que possuem muitos PDVs realizando vendas simultaneamente e acaba criando um gargalo de envios, pois um fica aguardando o outro, afetando também o timeout de resposta

Mesmo que você use um concentrador de envio... (onde todos os PDVs se conectam)... O CriticalSection é ainda mais importante, nesse cenário...

Caso contrário, as propriedades do Objeto ACBrNFe, seria compartilhada (e modificada) por diversas conexões... e você poderia ter respostas erradas, pois foram "contaminadas" por uma segunda chamada ao mesmo método..

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 para o comentário
Compartilhar em outros sites

Entendo, mas no caso do nosso concentrador é criada uma instância do objeto ACBrNFe para cada envio realizado, então os recursos não estariam compartilhados. Posso estar enganado, mas o Critical Section impede o acesso àquele bloco de código independente de quem está acessando.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Faça uma experiência com TimeOutPorThread ligado... pois nesse caso, será criada uma nova instância de HTTPClass em TDFeSendThread.Create

  FSSLHttp      := SSLHttpClass.Create(ADFeSSL); 

 

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 para o comentário
Compartilhar em outros sites

Já utilizo o TimeOutPorThread em alguns clientes e notei esse mesmo comportamento de "bloqueio". A execução da TDFeSendThread também possui a Critical Section. A variável HttpSendCriticalSection é global e criada no initialization da unit (o que está correto). A seção crítica impede que qualquer outra thread acesse o envio. Acredito que no caso da TimeOutPorThread estar ativa a Critical Section é interessante (não tenho certeza, teria que fazer mais testes), mas quando está desativada não vejo motivo.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
13 minutos atrás, rhuanrc disse:

mas quando está desativada não vejo motivo.

O motivo é evitar que duas threads tentem fazer uso simultâneo do mesmo objeto (FSSLHttpClass)

  • Curtir 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 para o comentário
Compartilhar em outros sites

Vou realizar alguns testes sem as seções críticas e verificar o comportamento. Apenas levantei esse questionamento para entender,  porque o comentário do SVN que implementou essa alteração (Revision 15240) cita que foi adicionado isto para evitar A.V. em algumas situações, mas não cita quais e não tem nenhum tópico referente ao problema.

Citar

-- ACBrDFeSSL --
[-] Ajuste em TDFeSendThread, para evitar A.V. em algumas situações
    (por: DSA)

Obrigado pelos esclarecimentos, Daniel.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Fundadores

Por favor teste com a Unit anexada nesse Post:

Mudei a visibilidade do HttpSendCriticalSection, para dentro do TDFeSSL

  • Curtir 2
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 para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

Conforme postagem no tópico relacionado, as alterações já estão no svn.

Att.

  • Obrigado 1
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

  • Este tópico foi criado há 2003 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.

The popup will be closed in 10 segundos...