Introdução

Com o advento da nova versão do Datasnap no Delphi 2009, novos modos de construir e consumir aplicações multi-camadas estão disponíveis. No que diz respeito a inicialização do servidor de aplicação, assumimos a responsabilidade de garantir que o servidor esteja apto para aceitar novas conexões. Em versões anteriores esta tarefa ficava a cargo do BSS (Borland Socket Server), que instanciava ou liberava recursos mediante requisições realizadas pelos clientes.

Entre as possíveis abordagens para cumprir esta tarefa, está a de criar o servidor de aplicação como um serviço do windows. Considerando um serviço de inicialização automática gerenciada pelo windows, é possível garantir que o serviço esteja sempre disponível, desde que o windows tenha sido iniciado.

Criando um serviço

Para criar um novo serviço no Delphi 2009, acesse File>New>Other e selecione opção Delphi Projects>Service Application.

Será criado um novo projeto, que você deve salvar com o nome de Servidor_Teste1, e uma unit que você deve salvar com o nome de uService.
Na unit criada, encontramos algo semelhante a um datamodule tradicional. Deste objeto derivado da classe TService, utilizaremos alguns métodos e propriedades para a construção do servidor de aplicação.

A propriedade DisplayName corresponde ao título do serviço, que será visualizado no painel de serviços. Insira o valor “Servidor de Teste”.
A propriedade Name correspondente ao nome real do serviço. Insira o valor “Servidor_Teste”.
A propriedade StartType indica como será a inicialização do serviço. Selecione a opção stAuto para que o serviço seja iniciado automaticamente.

Salve todas as alterações realizadas, e compile o projeto. O visual do projeto deve ser semelhante ao seguinte:

img1

Instalando um serviço

Após compilar o projeto, no diretório em que o projeto foi salvo, será criado um executável com o nome “Servidor_Teste1.exe”. Utilizando o prompt de comando, ou a opção executar do windows, insira o caminho completo do executável e insira o parâmetro “install” no final, como na imagem abaixo.

img2

Ao executar o comando, o serviço será instalado e uma mensagem será exibida confirmando o sucesso na instalação. Acesse o painel de serviços do windows, e procure pelo serviço instalado com o título “Servidor de Teste”. Você encontrará o serviço criado, com o status parado. Inicie e pare o serviço, para fins de teste.

No momento o serviço já está instalado e funcionando, porém ainda não possui funcionalidade alguma.

O servidor Datasnap

Para tornar o serviço criado um servidor Datasnap, adicione no formulário os componentes TDSServer e TDSServerTransport, da palheta “Datasnap Server”.

O componente TDSServer é o responsável por gerenciar o servidor datasnap. Altere a propriedade Name para “Server”, e a propriedade AutoStart para False. A propriedade AutoStart indica se o servidor deve iniciar automaticamente ou não. No caso de servidores em forma de serviço, o ideal é que a inicialização seja realizada manualmente ao iniciar o serviço.

O componente TDSServerTransport gerenciará as requisições dos clientes através do protocolo TCP/IP. Altere a propriedade Name para “ServerTransport”, e na propriedade Server aponte para o componente Server (TDSServer).
A propriedade Port é o número da porta de comunicação em que o servidor datasnap aceitará novas conexões. Neste caso deixaremos a porta padrão 211. Se houver mais de um servidor datasnap no computador, certifique-se de que cada servidor use uma porta diferente!

No evento OnStart do serviço, que é invocado quando o serviço passa do status parado para iniciado, é preciso iniciar também o servidor datasnap. Para isso, implemente o seguinte código:

procedure TServidor_Teste.ServiceStart(Sender: TService; var Started: Boolean);
begin
  Server.Start;
end; 

Da mesma forma, é preciso implementar a interrupção do datasnap quando o status do serviço passa de iniciado para parado. O evento OnStop do serviço deve ser implementado da seguinte forma:

procedure TServidor_Teste.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  Server.Stop;
end;

Salve todas as alterações realizadas, e com o serviço parado, compile o projeto.
O visual do projeto deve ser semelhante ao seguinte:

img3

O servidor de aplicação no formato de serviço já está pronto!
Basta iniciar o serviço para que o servidor datasnap criado esteja disponível para receber conexões através da porta 211.

Cuidados

O cuidado com exceções de erros deve ser redobrado quando utilizar serviços, comparado às aplicações tradicionais. Procure sempre utilizar blocos Try...Except e construir seus procedimentos da forma mais confiável possível.

Uma boa prática é incluir log’s de execução durante os procedimentos mais relevantes, que podem ser gravados num arquivo texto no mesmo diretório do serviço. Assim é possível através de um histórico acompanhar a execução do serviço, as exceções geradas e outras informações pertinentes.

Conclusão

Com a abordagem de utilização de um serviço para execução do servidor datasnap, encarregamos o próprio windows de iniciar o servidor de aplicação. Outra vantagem em utilizar um serviço ao invés de uma aplicação com formulários é a discrição, já que durante sua execução não é preciso nenhuma sessão iniciada no computador servidor, ou janelas abertas na interface.