Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde,

 

Criei um serviço REST para emissão de boletos onde passo os parâmetros para criação do boleto e o mesmo gera o PDF do boleto e envia por e-mail, o projeto utilizado é do Tipo DataSnap REST no Delphi Berlin.
Quando o servidor recebe uma solicitação de cada vez funciona bem, mas se tiver 2 solicitações simultâneas ocorre o seguinte erro:
http://screencast.com/t/pfilG5nAK
http://screencast.com/t/Cw6kRY0fO

Estou criando os controles no create do meu método que esta definido por sessão:
    vrBoleto        :TACBrBoleto;
    vrReportFC  :TACBrBoletoFCFortes;

Se alguém puder dar uma Luz.

Postado

Olá Vilani, também estou desenvolvendo um projeto para boletos....acredito que seu método onde gera o PDF precisa ser thread-safe ou seja, controlar a concorrência simultânea. Use uma sessão critica no delphi para gerar um pdf por vez.

Postado

Boa Tarde Márcio, obrigado pela dica, vou dar uma analisada nisso,

eu esperava que com o LifeCycle meu DSServerClass definido como Session ele ja controlaria isso, tentei por Invocation também mas sem sucesso,

Talvez eu esteja errado mas o ThreadSafe não criaria uma fiila de espera? meu desejo seria criar por sessão e ter processos paralelos, eu consigo com o ThreadSafe?

Postado

Vilani, com DataSnap não posso te ajudar porque não uso...Eu uso o Framework Mormot, mas logica é mesma.

Um código ThreadSafe geraria uma "fila de espera" sim, por isso que a parte protegida por uma sessão critica tem que ser a menor possível....se for muito longo a parte protegida, você vai perder as características multi-thread que você quer (processos paralelos )

Uma parte protegida para gerar seu PDF seria mais ou menos assim usando o TCriticalSection :

Critical.Enter();
  try
    GerarPDF;
  finally
    Critical.Release();
  end;
  • Este tópico foi criado há 2964 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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