Vous êtes sur la page 1sur 8

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

.:: Amo de los pensamientos, esclavo de los dichos ::.

Material de entrenamiento en WCF Esto es como una juguetera

Por Liarjo

Los servicios Windows son programas que corren en background independiente del usuario que tenga sesiones activas en un server. Los usamos para mltiples tareas por ejemplo monitorear el estado de un Servicio Web. Un cliente me pregunta cmo se puede hacer un servicio que monitoree un servicio Web y su tiempo de respuesta. Fcil, hay que hacer un servicio Windows en C#

Respuesta
Los pasos para construir un servicio Windows, utilizando C# son los siguientes: 1. 2. 3. 4. 5. 6. Crear un proyecto del tipo Windows Services. Implementar la lgica del Servicio. Agregar los parmetros de instalacin del servicio. Crear un proyecto de Instalacin. Instalar Extra, cmo hacer Debug?

Paso 1: Crear un proyecto del tipo Windows Services. Visual Studio tiene un tipo de proyecto especial para crear servicios Windows. En el cuadro de dialogo New Project hay que seleccionar la opcin Windows Services como muestra la figura 1.

Figura 1. Como resultado de esto se crea una clase llamada Service1 que contiene los siguientes mtodos: Service1(): constructor de la clase, aqu debemos incluir la configuracin 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.

1 de 8

22/06/2011 09:08 a.m.

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

Paso 2: Implementar la lgica del Servicio Este servicio debe hacer lo siguiente: 1. 2. 3. 4. Consumir un Servicio Web cada cierto periodo de tiempo. Validar que el Servicio Web resposponda (no se caiga). Validar que el tiempo de respuesta en menor que cierto valor. Mantener en configuracin la URL del Servicio Web, periodo de tiempo en que se repiten las llamadas y el tiempo de respuesta mximo.

Para consumir un Servicio Web utilizamos la funcionalidad de Visual Studio Add Web Reference que se muestra en la figura 2. En este ejemplo utilizar 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 construccin del Timer se realzia en el mtodo onStart del Servicio Windows, es decir cuando el servicio de levanta comienza a trabajar el Timer. Esto se muestra en el cdigo 1.

1: protected override void OnStart(string[] args) 2: { 3: 4: 5: 6: 7: 8: 9: 10: 11: } //Timer para el control del tiempo entre llamadas. myTimer = new System.Timers.Timer(); //Intervalo de tiempo entre llamadas. myTimer.Interval = 1500; //Evento a ejecutar cuando se cumple el tiempo. myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed); //Habilitar el Timer. myTimer.Enabled = true;

Cdigo 1. En el evento myTimer_Elapsed se hace 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 cdigo 2.

1: void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 2: { 3: 4: 5: 6: 7: 8: 9: } //Detiene el Timer myTimer.Enabled = false; //llama al Servicio Web CallServicioWeb(); //habilita el Timer nuevamente. myTimer.Enabled = true;

2 de 8

22/06/2011 09:08 a.m.

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

Cdigo 2. Por ltimo el mtodo CallServicioWeb() hace la llamada y controla el tiempo de respuesta del Servicio. En el cdigo 3 se puede ver la lgica de esto.

1: void CallServicioWeb() 2: { 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: } } } catch (Exception X) { Log(X.Message); //Proxy SerivicioWeb.GeoIPService Proxy = new ServicioWindowsMonitor.SerivicioWeb.GeoIPService(); DateTime Tini; TimeSpan Tdif; try { //Tiempo de inicio de la llamada Tini = DateTime.Now; //llamada al servicio Proxy.GetGeoIP("200.10.12.126"); //Tiempo de respuesta Tdif=Tini.Subtract(DateTime.Now); if (Tdif.Seconds < 10) { Log("Servicio Lento: " + Tdif.Seconds.ToString()+ "[S]"); }

Cdigo 3. Paso 3: Agregar los parmetros de instalacin del servicio. Para que el servicio pueda ser controlado por el administrador de servicios de Windows debemos agregar dos componentes a nuestro Servicio Windows:

serviceProcessInstaller: en este componente se debe fijar el usuario con que se ejecuta el servicio. En este caso utilizamos la cuenta Local Service. serviceInstaller: Este componente tiene la propiedad ServiceName, que define el nombre con que el Servicio aparece en la consola de Servicios. En este caso lo llamaremos Monitor GeoIP. Adems este componente tiene la propiedad StartType que define si el servicio parte de manera automatica, manual o est desabilitado. Para instalar estos componentes, en la vista de diseo del Servicio Windows usamos la opcin add Instaler del botn derecho. Esto se muestra en la figura 2.

Figura 2. Paso 4: Crear un proyecto de Instalacin

3 de 8

22/06/2011 09:08 a.m.

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

Para utilizar el servicio es necesario crear un instalador. Este proyecto instala el software del Servicio Windows en el disco, lo registra y agrega a la consola de servicios del sistema operativo. Para crear un proyecto de instalacin debemos utilizar el dialogo New Project con la opcin Setup como muestra la figura 3.

Figura 3. Una vez creado el proyecto debemos agregar a este proyecto de instalacin en la carpeta Application Folder el proyecto de salida. Este es nuestro proyecto de Servicio Windows. La figura 4 muestra cmo hacerlo usando el botn derecho.

Figura 4. El siguiente paso es agregar este proyecto de salida a las acciones Install, Commit, RollBack y Uninstall. Para ello en la pestaa Solution Explorer seleccionamos el botn Custom Action Editor. Luego en ese editor, agregamos el proyecto a todas las acciones, como lo muestra la figura 5.

Figura 5. Paso 5: Instalar Para instalar el Servicio Windows debemos hacer un Built del instalador y luego con el botn derecho sobre el proyecto de instalacin ejecutar la instlacin. Una vez instalado, siguiendo los pasos del Wizard, podemos ver el servicio en la consola de servicios del sistema operativo. En la figura 6 se puede ver las propiedades del evento que ya est en la consola de servicios!!!!

4 de 8

22/06/2011 09:08 a.m.

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

Figura 6. Paso 6: Bonus, Hacer Debug del Servicio. Para poder hacer debug del servicio podemos hacer un Attach del proceso. Ojo, esto es posible poque lo compilamos en modo Debug. Para hacerlo vamos al menu Debug de Visual Studio, opcin Attach. Cuando aparece el dialogo de procesos hay que buscar en la lista el nombe del servicio y apretar el botn attach. En ese momento Visual Studio entra en modo de debug. El dialogo de Attach se muestra en la figura 7.

Figura 7. Una vez que se est en modo de debug, se puede poner un punto de interupcin en el cdigo y hacer debug a gusto. Esto es lo bsico para desarrollar un Servicio Windows, con esto pueden construir desde un sencillo servicio de monitoreo hasta complejos Host de Windows Comunication Foundation por ejemplo. El cdigo de ejemplo de esta demos pueden bajarlo desde Aqu Salu2
Esta entrada fue publicada el febrero 14, 2008 a las 4:24 pm y est archivada bajo las categoras Q&A. Puedes seguir las respuestas de esta entrada a travs de sindicacin RSS 2.0. Puedes dejar una respuesta, o trackback desde tu propio sitio.
Like Be the first to like this post.

14 comentarios para Cmo hacer un Servicio Windows en C#?


1. Rodrigo Dice:
febrero 14, 2008 en 5:41 pm | Responder

Excelente explicacin master! 2. Rodrigo Dice:


febrero 14, 2008 en 6:22 pm | Responder

En Technicolor mucho mejor!!! Gracias por el cdigo me servir bastante 3. Juan Pablo Dice:
febrero 14, 2008 en 6:25 pm | Responder

5 de 8

22/06/2011 09:08 a.m.

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

Gracias por el Dato del Plug-in para poder poner el cdigo mucho mas legible salu2 4. Gonzalo Dice:
febrero 14, 2008 en 6:33 pm | Responder

Muy bueno Master!, realmente buena la explicacin paso a paso, queda muy claro, un manual de cortapalos

5.

afogutu Dice:
abril 29, 2008 en 11:32 am | Responder

Maestroooooooooo!!!!! por gente como vos me hice programador.Me salvaste las papas del fuego que ni te imaginas. Realmente muchas gracias.Omar. 6. Juan Pablo Dice:
mayo 5, 2008 en 3:06 pm | Responder

Estimado, Este tipo de mensajes son los que a uno le cargan las pilas y dan nimo para seguir escribiendo por amor al arte.Muchas gracias. salu2 7. edgar Dice:
mayo 19, 2008 en 1:13 pm | Responder

Hola Muchas gracias por la explicacipon es muy buena y me saco de un apuro solo tengo una duda, segui todos tus pasos y al correr el instalador me pide un usuario y contrasea de inicio de secion del servicio y la verdad ya le puse el usuario con el que estoy logeado y no me daja instalarlo te agradeceria mucho tu ayuda gracias y Salu2 8. Myriam Dice:
mayo 29, 2008 en 5:40 pm | Responder

Hola muy buena explicacin de la creacin de un window services, yo tengo creado mi windows services, pero quisiera saber como se puede llamar a este servicio desde una aplicacin web, para realizar el debug del mismo. Y tambin en este servicio necesito escribir un log en un archivo. Espero que puedas ayudarme.

Gracias. 9. Juan Pablo Dice:


mayo 29, 2008 en 10:51 pm | Responder

Hola Ing. Edgar Cruz, El usuario que te pide el asistente es la identidad con que el servicio se ejecutar. Tienes que poner uno que tenga los permisos necesarios uno de sistema. Espero te sirva esta respuesta J

6 de 8

22/06/2011 09:08 a.m.

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

10.

Juan Pablo Dice:


mayo 29, 2008 en 10:56 pm | Responder

Hola Mueca (que buen Nick ) No entiendo muy bien tu pregunta. Si lo que preguntas es como hacer conversar una aplicacin WEB con el servicio Windows, debes utilizar WCF que es la solucin de comunicaciones para cualquier necesidad de intercambiar informacin en Windows desde el Framework 3.0 Si tu pregunta es como hacer debug, no necesitas hacer eso. Despus de instalarlo utiliza VS para hacer Debug, tienes que usar la opcin attach process.. Salu2 11. Mario Alejandro Dice:
julio 9, 2008 en 3:18 pm | Responder

Puedes ser mas explicito en cuanto a la explicacion de como depurar el Servicio de Windows ??? he descargado tu codigo, he tratado de depurarlo pero no he podido. puedes explicarme como le haces??? saludos cordiales gbaltazar 12. Alvaro Hackmayer Dice:
enero 30, 2011 en 11:50 am | Responder

El codigo Fuente no esta disponible en el URL por favor mandarme el Url para poder descargarlo. Muy buena explicacin Master espero poder analizarlo bien con el codigo fuente 13. Juan Pablo Dice:
febrero 22, 2011 en 7:54 pm | Responder

Hola He implementado tu manual paso a paso y me va super bien. Estoy usando VS 2010, y no he podido correrlo pues me presenta varios errores.. Es posible que postearas el cdigo completo ? La verdad soy principiante con C#, ya correg varios errores (6 de 10) pero no he podido con algunos de ellos. Felicitaciones y mil gracias por compartir tu conocimiento. Liarjo Dice:
febrero 22, 2011 en 10:22 pm | Responder

Hola, Lamentablemente no tengo el Cdigo porque es muy antiguo este post

7 de 8

22/06/2011 09:08 a.m.

Cmo hacer un Servicio Windows en C#? ..:: Liarjo of Locksley ::..

http://jpgarcia69.wordpress.com/2008/02/14/%C2%BFcomo-hacer-un-...

Deja un comentario

Acceder

Acceder

Acceder

Recibir siguientes comentarios por correo. Recibir nuevas entradas por email.

Publicar comentario

Tema Kubrick. Blog de WordPress.com. Artculos (RSS) y Comentarios (RSS).

8 de 8

22/06/2011 09:08 a.m.

Vous aimerez peut-être aussi