Service is running


Há aproximadamente dois meses iniciei um projeto onde tive que construir um Windows Service (ou WinService). Pois bem, a finalidade do mesmo é resgatar os registros de uma determinada Base de Dados e enviar para um orgão chamado SERASA.

Este orgão tem a finalidade de fornecer informações sobre créditos e restrições financeiras, entre outros documentos e serviços, relacionados à pessoas físicas ou jurídicas (Empresas). Eles fornecem várias formas de resgatar do cliente e devolver para o mesmo tais informações. Alguns dos meios são Sockets, HTTPs e algo que não estou recordando agora (uma solução da IBM).

Como a idéia era criar tudo em .NET, fomos logo lá entender o problema. Ao cadastrar os Clientes na Base de Dados de um sistema interno (desenvolvido em Delphi), o serviço deverá correr sem nenhuma intervenção humana (claro, é esta a finalidade de um WinService) e automaticamente gerar a String de envio e receber o valor de retorno do SERASA. Vale lembrar que muitas vezes, o retorno não é imediato, tendo assim que ficar de tempo em tempo enviando uma String para checar se o lote que foi enviado já foi ou não processado.

Para que o processo corresse corretamente, tivemos que nos atentar à algumas condições, pois existiam seis tipos de documentos a serem enviados e recebidos. O processo de resgate dos dados da Base de Dados, a geração da String de envio, o recebimento e análise do retorno e a persistência na DB são iguais para todos, ou seja, os passos a serem executados devem ser exatamente os mesmos. A solução neste caso, foi criar uma classe Base que implementa um Template Method e dentro dele define os passos do algoritmo, deixando as subclasses (as classes derivadas) implementarem os métodos como eles devem ser, ou seja, é exclusivo para cada subclasse, pois a geração da String de envio por exemplo é diferente entre os tipos de documentos a serem enviados.

Bem, depois do envio e recebimento OK, vem a parte da persistência dos dados retornados pelo SERASA na Base de Dados. Neste caso, tenho cerca de 23 tabelas com média 15 à 30 campos em cada uma delas. Como tenho os meus objetos na minha aplicação e não queria criar uma DAL/DAO para resgatar os dados e assim popular cada um dos meus objetos, e estes por sua vez adicionar à coleção adotamos o NHibernate (ferramenta de OR/M), e com isso, diminuiu à 0 (Zero) a escrita de códigos T-SQL e Stored Procedures.

Por fim, é criado as Threads que são necessários para que essas “rotinas” corram “side-by-side”, e assim aumentando a facilidade e produtividade interna da empresa que está a utilizar este WinService.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s