Servidores de aplicação não fecham (3 camadas)

07/12/2005

Olá feras do Delphi, estou com um problema e queria que vcs me ajudassem...

Tenho um aplicativo em 3 camadas, onde abro o sistema e o mesmo starta 3 servidores no tray, o sistema abre direitinho, coloco senha ele entra normalmente, o problema tá no seguinte:

Estava trabalhando com o Delphi 6 e tudo tava ok, migrei para o Delphi 7 e agora toda vez que fecho o sistema os servidores de aplicação não fecham no tray. Eles ficam rodando, se tentar abrir a aplicação novamente ela não abre ficando travada, ai tenho que dar CTRL+Alt+Del e finalizar os Servidores, um a um.

Debuguei o programa e os servidores em tempo de execução eles conectam e desconectam manualmente ou seja, uso o DCOMConnection junto com um SimpleObjectBroker para conectar os servidores, quando dou um conect no DataModule via DCOM o servidor aparece conectado no tray normalmente, se dou um disconect ele disconecta normalmente também.

O problema tá ai quando a aplicação roda e a fecho os servidores não fecham. Se tentar fechar os servidores na mão com o botão direito (coloquei um botão fechar) eles travam. Se executar somente os servidores sem a aplicação principal consigo fecha-los normalmente.

Alguem tem alguma solução?


Nilsonalvernaz

Respostas

09/12/2005

Nilsonalvernaz

Ninguém pode me ajudar não?


Responder Citar

11/12/2005

Thomaz_prg

Tive o mesmo problema usando DCom e máquina local, tipo servidor e cliente na mesma máquina... descobri que isso acontecia porque a conexão ficava pendente, ou muitas vezes, existia uma tentativa de reconexão (automática), por parte do componente (DComCOnnection). A conexão ficava com esses problemas, quando eu esquecia de fechar todos os ClientDataSets ligados ao componente de conexão. Resolveu, fazendo assim, eu fechava todos os clientdatasets antes de fechar a conexão (Dcom). Pode ser que resolva pra você. Mas o erro sumiu também quando comecei a usar SocketConnection... fica aí outra dica.


Responder Citar

12/12/2005

Nilsonalvernaz

thomaz_prg, mas isso ocorre assim do nada? pq estava funcionando normalmente e derrepente deu esse problema...


Responder Citar

12/12/2005

Thomaz_prg

No meu caso o problema apareceu quando comecei a executar a aplicação cliente, na mesma máquina da aplicação servidora (usando DCom)... verifiquei que, se eu não tivesse aberto nenhum CDS, quando eu fechava, ele finalizava legal, mas se eu abrisse algum CDS, ele ficava lá.... Aí passei a fechar os CDS e o erro desapareceu. Daí resolvi usar o SocketConnection pra ver se acontecia o mesmo... e vi que não... com Socket funcionava legal... daí comecei a usar Socket.

Mas o erro surgiu do nada mesmo.


Responder Citar

12/12/2005

Nilsonalvernaz

thomaz_prg, mais uma dúvida já que vc também teve esse problema.
Vc trocou o Dcom pelo socket correto?
Notou alguma diferença de performace? teve que mudar alguma coisa?
Pois já tenho todo meu sistema estruturado terei que mudar mais alguma coisa?
Tenho que mexer nos servidores tmbm?


Responder Citar

12/12/2005

Thomaz_prg

thomaz_prg, mais uma dúvida já que vc também teve esse problema. Vc trocou o Dcom pelo socket correto?

Correto. E meu problema desapareceu.

Notou alguma diferença de performace? teve que mudar alguma coisa?

A performace ficou a mesma... e ainda tive o controle de quem estava usando o sistem (o IP da máquina). Praticamente não mudei nada, porque eu conectava meus CDS (ClientDataSets) a um ConnectionBroker e Conectava o ConnectionBroker ao componente de conexão remota (que era DComConnection e depois troquei por SocketConnection). Então não fiz mudança nenhuma.

Tenho que mexer nos servidores tmbm?

Não. Na máquina servidora, basta que o Socket Server - Scktsrvr.Exe esteja ativo (encontrado na pasta C:\Arquivos de Programas\Borland\DelphiX\Bin). Eu apenas coloquei esse aplicativo para iniciar junto com o windows (no registro, chave HKEYLOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Basta adicionar uma chave com um nome qualquer, e colocar o caminho do aplicativo).

Só isso. Quanto aos SQL´s e todos os demais comandos, permanacem os mesmos.


Responder Citar