Servicios Windows en .NET (1ª parte)

Hace no mucho me las tuve que ver y desear para migrar un servicio en C++ (infumable) a .NET, escrito en C#, y tuve bastantes problemas para conseguirlo instalar y hacerlo funcionar. Por ello, por la cantidad de horas que perdí buscando información y probando cosas, he decidido aportar mi granito de arena redactando un artículo que, si alguien tiene la suerte de dar con él, espero que le resuelva todos sus problemas de forma rápida. Concretamente traduzco de forma muy libre y amplío con bastantes notas de mi cosecha un artículo que encontré en Internet. Al final indicaré la fuente, como debe ser, para que encontréis toda la información necesaria.

Explicaré en los apartados siguientes cómo crear, instalar y depurar un servicio windows, aunque, personalmente creo que la mejor forma de depurar un Servicio Windows es comenzar creando un proyecto de Consola para Windows y después añadirle lo necesario para convertirlo en Servicio, es decir, una clase Service con los métodos OnStart() y OnStop() y lo necesario para lanzar dicho servicio: ServiceBase, ServiceToRun, etc.

Qué es un Servicio Windows

No me centraré en el potencial de un Servicio Windows. Remito al lector a buscar información, pero como ejemplos, saber que podemos interactuar con una base de datos, leer y escribir en el registro Windows, crear y eliminar archivos (lo típico, nada nuevo), además de manejar los Logs de los Servicios Windows y las Colas Windows para enviar y recibir mensajes. No entraré en detalle con estos puntos y remito de nuevo al lector a que busque en la Red.

Un servicio Windows es una aplicación que se ejecuta indefinidamente sin participación del usuario en background, es decir, sin que el usuario tenga constancia de su funcionamiento mediante una ventana de cualquier tipo, puesto que no interactúan con el usuario. Para ver estos servicios puede abrir el Administrador de Tareas y, en la pestaña Procesos se listarán todos estos servicios que están funcionando. Estos servicios pueden ser gestionados, además, mediante el Administrador de Servicios, dentro del panel de contol y luego en Herramientas Administrativas, y gestionar ciertas cuestiones de su funcionamiento, como nombre, qué hacer cuando el servicio falla, cómo arrancarlo, etc.

Estos servicios fueron introducidos con Windows NT. No existen en Windows 9x ni Windows Me.

Lo que realizan estos programas son ciertas tareas de gestión, estar alerta ante ciertos eventos, abrir ciertos puertos o servicios, informar a las capas superiores de ciertos eventos que sucedan durante el funcionamiento de la máquina, etc. Ejemplos: las dichosas actualizaciones automáticas están alerta de que Microsoft envíe mensajes de actualización para pedir a los usuarios que existen actualizaciones disponibles y que deberían hacerlo. SQLServer, Microsoft Exchange… son otros ejemplos de servicios, que nos permiten acceder al SGBD o recibir correos y notificarnos, respectivamente.

Creación de un Servicio Windows

Para ver el ejemplo que la fuente explica aquí, les remito al final del artículo para ver el artículo original en inglés, donde se explica un ejemplo de cómo crear un servicio.

En Visual Studio .NET es bastante sencillo crear un Servicio Windows. Simplemente hay que seguir los siguientes pasos:

  1. Comience un nuevo proyecto
  2. Seleccione Servicio de Windows de la lista de plantillas disponibles.
  3. El diseñador se abrirá en modo diseño.
  4. Arrastre un objeto Timer desde la solapa de Componentes en la Caja de Herramientas al área de diseño (Aviso: asegúrese de que usa el Timer de la solapa Componentes y no el que viene con Windows Forms).
  5. Acceda a las propiedades del objeto Timer y establezca la propiedad Enabled a falso y la propiedad intervalo a 30000 milisegundos.
  6. Cambie a la vista de código (pulsando F7) para añadir la funcionalidad al servicio.

Código del Servicio

En el código de la clase notará que el servicio Windows extiende la clase System.ServiceProcess.Service (de la cual es hija).
Todos los servicios Windows creados con .NET deben extender esta clase. Es obligatorio que su servicio sobreeescriba los siguientes métodos, los cuales son incluidos por Visual Studio por defecto.

  • Dispose – limpia todos lso recursos
  • OnStart – controla el inicio del servicio
  • OnStop – controla la fase de parada del servicio

NOTA: Hay otros, como OnPause. Para más información, busque en la Red🙂.

CONTINUARÁ…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s