Lista de Artículos Inicio
- Año III  









foro informatizate

Creando Servicios Windows en .NET - (Parte 1/2)

Victor Hugo Lamadrid Mendoza

Analista Programador Web GILAT Peru
Ing. Informático
Miembro Fundador de informatizate

victor_lamadrid(at)informatizate(dot)net
Marzo 7, 2005


Introducción:

Muchas veces se necesitan hacer aplicaciones que ejecuten tareas de larga duración y que se inicien automáticamente ante determinados eventos como al encender la computadora, puedan ser pausadas, reiniciadas, carezcan de interfaz y no interfieran con los otros trabajos que realizan los usuarios en la misma computadora. Tales aplicaciones se conocen formalmente en el mundo Windows como Servicios Windows y son idóneas cuando se desea implementar agentes que trabajen en background y realicen tareas de rutina de forma periódica o que traten con carga de trabajo considerable.

El presente artículo cubre temas relacionados al desarrollo de Servicios Windows como su creación, programación e instalación haciendo uso de Visual Studio .NET, desarrollando una aplicación de ejemplo. En un texto posterior veremos como se puede controlar un Servicio Windows, elaborando nuestro propio controlador.


Aplicación Ejemplo

El Servicio Windows realizará una tarea muy sencilla para propósitos didácticos que consiste en la escritura a intervalos regulares de líneas de información en un archivo de texto. Se tendrá la oportunidad de pausarlo, reiniciarlo y por supuesto detener su ejecución. El código fuente y el instalador de esta aplicación de ejemplo se pueden descargar aquí.


Creación del Servicio Windows.

Cuando se desea crear un servicio usando Visual Studio .NET se tiene a disposición una plantilla de proyecto denominada Windows Service. Al crearse el proyecto en forma automática se crea la referencia al espacio de nombres denominado System.ServiceProcess, cuyas clases nos permitirán crear el servicio. Los pasos son muy sencillos:


1. Crear un nuevo proyecto desde el entorno de desarrollo, seleccionar del diálogo desplegado la plantilla Windows Service como se muestra en la figura 1.


Figura 1. Creando un Servicio Windows


2. En la ventana Propiedades del Servicio, se debe establecer la propiedad nombre a WriterSample que es como se llamará nuestra aplicación de ejemplo y debe coincidir con el nombre usado en las clases del instalador que veremos mas adelante.


Figura 2. Ventana de propiedades del servicio recien creado.


3. Configurar algunas de las propiedades para indicar como funcionará el servicio.

Propiedad
Valor
CanStop

True indica que el servicio podrá ser detenido
False previene que el servicio sea detenido.

CanShutDown

True indica que el servicio quiere recibir una notificación en caso la computadora donde reside inicie su proceso de apagado, permitiendo llamar al procedimiento OnShutDown

CanPauseAndContinue

True indica que el servicio podrá ser pausado y reiniciado.
False evita que el servicio pueda ser pausado

CanHandlePowerEvent

True indica que el servicio es notificado de los cambios de estado de energía de la computadora; False previene que el servicio sea notificado de esos cambios.

AutoLog

True. Permite al servicio escribir en el log de eventos Aplication cuando cumple una determinada acción; False deshabilita esta funcionalidad.


Para propósitos de nuestro ejemplo permitiremos la pausa y reinicio del servicio.

4. Acceder al Editor de Código y comenzar a escribir en los procedimientos OnStart y OnStop


Figura 3. Ventana de código para el servicio recién creado.


5. Sobrescribir cualquier otro método para el cual quisiéramos dar funcionalidad.

Revisando el código de ejemplo

A continuación veremos el código de la aplicación ejemplo

    Private Hilo As Thread = Nothing
    Private objFile As File
    Private objWriter As StreamWriter
    Private log As New EventLog
    Private PathFile As String = Configuration.ConfigurationSettings.
AppSettings("PathFile")
    Private timeSleep As Integer = Configuration.ConfigurationSettings.
AppSettings("timeSleep")
    

En la parte superior de la clase declaramos variables que usaremos en varios de los procedimientos del servicio, como se muestra en la parte superior. Entre estas tenemos a la variable Hilo cuya función será la de permitirnos crear y controlar un hilo o thread, el cual llevará a cabo la ejecución del método que realiza la tarea principal del servicio.

Las variables objFile y objWriter son las que nos permitirán tratar con el archivo sobre el cual el servicio escribe.

Así mismo tenemos la posibilidad de crear e interactuar con nuestro propio log de eventos, esto mediante el uso de la variable log.

PathFile y timeSleep, especifican la ubicación del archivo a escribir y el tiempo de inactividad del thread en milisegundos, los valores de estas variables se extraen del archivo de configuración del servicio.


Figura 4. Contenido del archivo de configuración del servicio.


Los espacios de nombres adicionales que requerimos para estas funcionalidades son:
  • System.Threading
  • System.IO
  • System.Diagnostics

La siguiente sección de interés es el procedimiento que contiene las instrucciones que se deben ejecutar cuando el servicio da inicio.

Protected Overrides Sub OnStart(ByVal args() As String)

Dim start As ThreadStart = New ThreadStart(AddressOf Writing)

Try

            If Not objFile.Exists(pathFile) Then
                objWriter = objFile.CreateText(Me.PathFile)
            Else
                objWriter = objFile.AppendText(Me.PathFile)
            End If

            objWriter.WriteLine("Inicio del trabajo de escritura : " & Now().ToString)

            Hilo = New Thread(start)
            Hilo.Start()

        Catch ex As Exception

            LogEvent(ex.Message)

End Try

End Sub
    

Dim start As ThreadStart = New ThreadStart(AddressOf Writing)
    

Con la línea anterior declaramos un tipo de puntero al código que se ejecutará dentro del hilo que hemos declarado para eso hacemos uso de la clase ThreadStart. El código a ejecutarse en el hilo será el contenido en el procedimiento Writing.





Referencias

Windows Services Applications - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/
vboricreatingconfiguringwindowsserviceapplications.asp


Creando Servicios Windows - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/
vboricreatingconfiguringwindowsserviceapplications.asp



Comenta éste artículo en el foro de informatizate.


   

Otros Artículos del Autor: Fecha Publicación:
Consideraciones de Seguridad en el Diseño de Aplicaciones Web Agosto 16 del 2004
Almacenamiento Multimedia en Base de Datos Relacionales con ASP.NET Junio 5 del 2004
Escalabilidad, un factor a tener en cuenta. Abril 19 del 2004
Arquitectura de Software (PARTE II) Febrero 8 del 2004
Arquitectura de Software 06 de Octubre del 2003
UML y el Empleo de los Diagramas de Estados 10 de Diciembre del 2002


Google


Copyright © 2002-2005 Grupo informatizate. Reservados todos los derechos.
Prohibida la reproducción total o parcial en cualquier formato sin previa autorización.
On-line desde el 27 de Noviembre del 2002