Ing. sistemas

Solo disponible en BuenasTareas
  • Páginas : 11 (2641 palabras )
  • Descarga(s) : 0
  • Publicado : 20 de agosto de 2012
Leer documento completo
Vista previa del texto
¿Cómo hacer un Servicio Windows en C#?
Los servicios Windows son programas que corren en background independiente del usuario que tenga sesiones activas en un server. Los usamos para múltiples tareas por ejemplo monitorear el estado de un Servicio Web.
Un cliente me pregunta cómo se puede hacer un servicio que monitoree un servicio Web y su tiempo de respuesta.
Fácil, hay que hacer un servicioWindows en C# 
Respuesta
Los pasos para construir un servicio Windows, utilizando C# son los siguientes:
1. Crear un proyecto del tipo Windows Services.
2. Implementar la lógica del Servicio.
3. Agregar los parámetros de instalación del servicio.
4. Crear un proyecto de Instalación.
5. Instalar
6. Extra, ¿cómo hacer Debug?
Paso 1: Crear un proyecto del tipo WindowsServices.
Visual Studio tiene un tipo de proyecto especial para crear servicios Windows. En el cuadro de dialogo ‘New Project’ hay que seleccionar la opción ‘Windows Services’ como muestra la figura 1.

Figura 1.
Como resultado de esto se crea una clase llamada Service1 que contiene los siguientes métodos:
Service1(): constructor de la clase, aquí debemos incluir la configuración del Servicio.OnStart(string[] args): Evento cuando el servicio se inicia. Esto ocurre cada vez que el servicio comienza a funcionar.
OnStop(): Evento cuando el servicio se detiene. Aquí se deben eliminar todos los recursos que el servicio utiliza.
 
Paso 2: Implementar la lógica del Servicio
Este servicio debe hacer lo siguiente:
1. Consumir un Servicio Web cada cierto periodo de tiempo.
2. Validarque el Servicio Web resposponda (no se caiga).
3. Validar que el tiempo de respuesta en menor que cierto valor.
4. Mantener en configuración la URL del Servicio Web, periodo de tiempo en que se repiten las llamadas y el tiempo de respuesta máximo.
Para consumir un Servicio Web utilizamos la funcionalidad de Visual Studio ‘Add Web Reference’ que se muestra en la figura 2. En este ejemploutilizaré el servicio gratuito de  WebServiceX.

Figura 2.
Para realizar la tarea repetitiva de llamar al servicio Web cada cierto intervalo de tiempo utilizaremos un objeto del tipo System.Timers.Timer. Este objeto tiene la capacidad de levantar un evento cuando pasa cierto periodo de tiempo desde que se activa. En este caso la construcción del Timer se realzia en el método onStart del ServicioWindows, es decir cuando el servicio de levanta comienza a trabajar el Timer. Esto se muestra en el código 1.
 
  1: protected override void OnStart(string[] args) 2: { 3: //Timer para el control del tiempo entre llamadas. 4: myTimer = new System.Timers.Timer(); 5: //Intervalo de tiempo entrellamadas. 6: myTimer.Interval = 1500; 7: //Evento a ejecutar cuando se cumple el tiempo. 8: myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed); 9: //Habilitar el Timer. 10: myTimer.Enabled = true; 11: } |
Código 1.
En el evento myTimer_Elapsed sehace la llamada al Servicio Web. Pero, para evitar problemas de concurrencia se detiene el Timer antes de hacer la llamada y luego se vuelve a activar. Esto se muestra en el código 2.
 
  1: void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 2: { 3: //Detiene el Timer 4: myTimer.Enabled = false;5: //llama al Servicio Web 6: CallServicioWeb(); 7: //habilita el Timer nuevamente. 8: myTimer.Enabled = true; 9: } |
Código 2.
Por último el método CallServicioWeb() hace la llamada y controla el tiempo de respuesta del Servicio. En el código 3 se puede ver la lógica de esto.
 
 ...
tracking img