Closed gleikocarmelo closed 2 years ago
Não é o Horse que cria seu DataModule, quem tem que criar / destruir é você. Você vai ter um
procedure DoRequest(Req: THorseRequest; Res: THorseResponse; Next: TProc);
begin
end;
o que você faz dentro do begin e do end é coisa sua. Para cada requisição o horse cria uma thread. Se compartilhar memória dentro desse begin e do end, vai ter problema
Para trabalhar com DataModule então o q vc sugere? Dentro de cada requisição devo criar e destruir o DataModule, ou existe uma melhor forma de fazer?
Essa é a melhor forma, uma requisição não deve compartilhar memória com outra, se não da acesso ao mesmo tempo e da ruim. Isso não só com Horse....
Tenho uns 15 métodos, existe uma forma de fazer o create e o destroy do DM automaticamente toda vez que for feita uma nova requisição ou tenho que fazer isso em cada método separadamente?
Podemos encerrar essa issue?
Podemos sim, gostaria de deixar um vídeo muito bom de como resolver esse problema de uma forma bem simples. https://www.youtube.com/watch?v=Mda4A1ShrdY&list=PLjxkIzEMU_eil2a7-CpdUoNeuSnANM34y&index=6
Vou expor meu cenário para ficar mais fácil o entendimento. Recentemente migrei meus projetos para o Horse, anteriormente utilizava DataSnap. No DataSnap, dentro do ServerMetods tenho um FireConnection conectado ao meu banco principal e os seguintes métodos: -- GetIdCliente - Banco Principal. (Consulta: Select id FROM tabclientes) -- GetListaProdutos - Cada Cliente tem seu Banco. (na consulta coloco Use "NomeBancoCliente" e faço a consulta dos produtos) Na migração para o Horse, criei um DataModule e passei o FireConnection para ele e com isso passou a não funcionar igual no DataSnap, se eu fazer a requisição GetListaProdutos e depois for fazer a GetIdCliente fala que não existe essa tabela no Banco, porque o FireConnection continua setado no Banco do Cliente. Ou seja o Horse não Cria uma nova instancia para cada requisição automaticamente.