Você está na página 1de 39

Mdulo 2

HOSTING SERVICIOS EN WCF

Hosting servicios WCF (Service Host)

ServiceHost

Hosting WCF en Servicios Windows

Hosting IIS, WAS

Configurando WCF hosts

Buenas Prcticas cuando se aloja un servicio WCF

Laboratorio: Alojamiento de un servicio WCF


Contenido

Alojar servicios WCF (Service Host)

ServiceHost

Hosting WCF en Servicios Windows

Hosting WCF en IIS, WAS Self-Hosting

Configurando WCF Hosts

Buenas prcticas en alojar un servicio WCF

Laboratorio: Hosting Servicios WCF

Para que funcione un servicio no es suficiente con implementar el servicio, sino que tambin es
necesario algn tipo de hosting para que este escuche los requerimientos hacia el servicio y
posteriormente direccionarlos hacia el servicio. Con WCF existen diferentes maneras de alojar
un servicio y en varias tecnologas como ser:

Servicios Windows
Internet Information Services (IIS)
Windows Process Activation Service (WAS)
Windows Server AppFabric

En este mdulo se aprender como alojar un servicio WCF, como configurar el host y como
aplicar las buenas prcticas al momento de alojar un WCF.
Alojar un servicio WCF (Service Host)

Qu es Service Host?

Responsabilidades de un Service Host

Como es la infraestructura de components de Service Hosts

Los servicios WCF estn escritos en clases de C#, pero la infraestructura es el responsable de
levantar o poner a vivir el servicio.

Los Service Hosts asignan y administran los recursos requeridos para materializar el servicio,
como ser haciendo que los servicios se puedan descubrir y ser consumibles por los clientes,
incluyendo la administracin misma del recurso, administracin configurable, monitoreo y
manejo de errores.
Que es un Service Host?

Conceptos clave:

Es un proceso el cul es responsable para asignar recursos para un servicio


El Host escucha los requerimientos, asigna memoria a los threads,
crea instancias de los servicios y enva respuestas
Los Hosts materializan los servicios
Los servicios viven dentro de los Hosts; el servicio de configuracin esta
escrito en el archivo de configuracin del Host.

Para implementar un WCF es necesario escribir una clase que implemente un contrato. El
propsito del Service Host es preparar la implementacin de la clase del servicio para
direccionar hacia los clientes, asignando los recursos que el servicio requiere y entonces
administrando su estado de ejecucin.

El Service Host soporta un modelo de configuracin que usualmente est configurado en su


archivo de configuracin, dependiendo en el ambiente en el cual el servicio est alojado.
Asimismo es posible configurar el Service Host a travs del cdigo, sin afectar la
implementacin del servicio.

El Service Host es el responsable de abrir los puertos y escuchar los requerimientos segn su
configuracin, el host administra los requerimientos entrantes, asigna recursos como ser
Memoria y Threads crea el contexto de las instancias del servicio, y entonces pasa el
contexto de la instancia a travs de WCF runtime.

El Service Host es donde el servicio vive y un host solamente puede manejar un solo servicio.
Por lo tanto, si el host no es confiable, existen problemas de performance o propenso a errores
y esto afectar directamente al servicio.

Elegir un proceso adecuado de hosting es importante para mejorar la robustez del servicio.
Responsabilidades de un Service Host

Resource Configuration Monitoring Error


Management Management Handling

Thread Scale-Out Availability


Management Monitoring Fail-Over
Configuration
Memory Health Failed
Management Multi- Monitoring
Environment Message
Service Deployment Performance Management
Isolation Tracking
Configuration Exceptions
Management State Handling
Trottling
Management
Load Identity and Message Disaster
Balancing Impersonation Tracking Recovery

El Service host es responsable de administrar el servicio y sus recursos, las siguientes son
algunos de las responsabilidades de service host:

1. Administracin de Recursos (Resource management)


2. Administracin de Configuracin (Configuration management)
3. Monitoreo (Monitoring)
4. Manejo de errores (Error handling)

Resource Management (Resource management):

El host provee la administracion de threads y memoria, cuando un requerimiento llega, el host


asigna recursos como ser threads y memoria para manejar ese requerimiento.

Ms adelante, el host administra el comportamiento de los threads para limitar los recursos
disponibles para la asignacin, este previene las condiciones peligrosas, donde podra estar
recursos insuficientes para un manejo apropiado de los requerimientos.

Finalmente, el host nos provee un mecanismo para el manejo de excepciones que previene
que el proceso de fallas y terminado si el servicio lanza excepciones.

Administracin de Configuracin (Configuration management)

El host nos provee un modelo de configuracin comprensivo para configurar los servicios y
varias configuraciones de varios hosting.

Algunas configuraciones que son configurables incluye administracin de la identidad,


autenticacin, autorizacin, y ejecutar impersonacin de la identidad del cliente.

Adems, el service host nos permite cargar nuestra propia configuracin de varios origines,
como ser archivos o bases de datos.
Monitoreo (Monitoring)

Una de las responsabilidades del service host es proveer capacidad e monitoreo por el servicio,
y esto significa para la coleccin de informacin relacionado a la actividad del servicio.

El service host provee nmeros de counters del rendimiento para poder inspeccionar el estado
del servicio, incluyendo los servicios asignados y los disponibles.

Adems el host provee la habilidad de configurar un rastreo y registro para los servicios, de
modo que puedan guardarse y copiarse para todos los mensajes pasado al servicios, y
registrar la actividad del servicio, como tambin la entrada de los requerimientos y la duracin
de la actividad.

Finalmente el host provee establecer las capacidades de administracin de modo que permite
la administracin la informacin entre los requerimientos, un ejemplo comn seria utilizar el
alojamiento Microsoft ASP.NET, el cual permite acceder a la actual aplicacin ASP.NET o
estado de sesin.

Manejo de errores (Error handling)

El manejo de errores es un aspecto importante del service host, esto es esencial que los
errores sern contenidos y no propagados, de modo que ellos no causarn que el proceso falle
o termine.

El host necesita aplicar manejo de excepciones para atrapar excepciones lanzados por la
implementacin del servicio, y decide qu hacer con ello por ejemplo relanzarlos al cliente,
remplazarlos con otros mensajes con fallo o registrarlos.

Adems, podra haber casos donde mensajes fallan al ser transmitidos o procesados; el host
necesita determinar cmo manejar estos mensajes.

Finalmente, el host puede necesitar proveer una solucin a la falla por ejemplo el reinicio del
sistema.
Como es la infraestructura de
components de Service Hosts
Conceptos clave:

Implementar un host que requiere tiempo significativo y


desarrollar esfuerzos
Tratar a un servicio como otra infraestructura del componente
del sistema, como ser una base de datos o un sistema operativo
Considerar utilizando hosts comerciales en lugar de construir tu
propio host

Service host tiene muchas responsabilidades sobre el ciclo de vida del servicio. Construir un
service host confiable y robusta no es una tarea fcil, y no debera ser tomado tan ligeramente.

Alternativas de hosting:

Tambin es posible alojar servicios WCF en muchos tipos de procesos, y tambin es posible
aplicar auto-alojamiento (self-hosting) en una manera que tu deseas. La clase ServiceHost de
WCF provee alojar capacidades del servicio, el cual se puede utilizar dentro de algn tipo de
aplicacin.

Si no quieres construir tu propio proceso para alojar tu servicio es posible utilizar otros
ambientes de hosting como ser:

IIS, el Windows web server que permite alojar y administrar aplicaciones web, como ser
las aplicaciones ASP.NET Web forms, Servicios Web ASP.NET y servicios WCF.
Servicio de Windows Process Activation Service (WAS) un componente disponible
con IIS 7.0 en Windows Vista o Windows 2008.
AppFabric, un set de extenciones de WAS, haciendo esto fcil de construir, escalar y
administrar web y aplicaciones compuestos que funcionen en IIS.
Enterprise Service Buses (ESB). Es una estructura de alojamiento comercial que son
utilizados para integracin de sistemas, como ser Microsoft BizTalk.
ServiceHost

Conceptos clave:

Alojar servicios WCF


La clase System.ServiceModel.ServiceHost
Configurando servicios Endpoints
Utilizando el Service Base Address
Utilizando Servicios Endpoints por defectto

Los clientes acceden a los servicios WCF via Endpoints, los cuales son definiciones de
Direcciones, Bindings y Contratos. El service host de WCF gestiona endpoints.

En esta leccin se aprender como utilizar la clase ServiceHost y como configurarlo utilizando
archivos de configuracin XML y utilizando cdigo.
Hosting los servicios WCF

Conceptos clave:

Los servicios WCF pueden ser alojados en algn proceso Windows


utilizando la clase System.ServiceModel.ServiceHost
Un service host debe ser proveido con un tipo y configuracin de endpoint
Las configuraciones del host puede ser proveido por cdigo o en un
archivo de configuracion XML

//Instance a new ServiceHost


myServiceHost = new
ServiceHost(typeof(CalcService.WCFCalc));

//Start listening for requests


myServiceHost.Open();

Es posible utilizar la clase ServiceHost para alojar servicios en cualquier tipo de procesos
Windows.

1. Aplicacin: Se pueden utilizar las aplicaciones de consola, aplicaciones de formularios


Windows y aplicaciones WPF para alojar un servicio. El host empezar despus de que
la aplicacin empieza, y se termina una vez que la aplicacin se termina. Usualmente
un servicio se aloja en una aplicacin para permitir conectarse a los servidores remotos
o clientes y deliberar mensajes que afectar la informacin que una aplicacin muestra
al usuario final.

2. Servicios Windows (NT Service): Es posible alojar un servicio en un servicio Windows.


Esto causar que el servicio comience cuando el sistema operativo este corriendo y
pare cuando el sistema operativo est apagado

3. Hosts comerciales (IIS y WAS): Se puede utilizar IIS para alojar un servicio en un
ambiente monitoreado y auditado. IIS maneja la salud del servicio, monitorea su uso y
ms cosas. El WAS hereda soporte de IIS de HTTP transports, y aade soporte para
otros tipos de transporte como ser Transmission Control Protocol (TCP), Named Pipes
y Microsoft Message Queuing (MSMQ).

4. AppFabric: Ofrece una mejor administracin y monitoreo para los servicios WCF y el
workflow del servicio cuando est alojado en IIS.

Nota: Utilizando servicios Windows es la manera mas comn de alojar un servicios que no
utilicen protocolos de comunicacin HTTP, como ser TCP o Named Pipes. IIS 6.0 no puede
manejar estos protocolos de comunicacin (este solamente soporta transportes HTTP y
HTTP/Secure (HTTPS)), pero con la introduccin del WAS en IIS 7.0, es posible par aun host
correr en IIS para abrir TCP basado en endpoints.

Creando un Service host:

Para crear un Service Host, primero creamos una instancia de la clase ServiceHost:
Una instancia de ServiceHost puede manejar un simple tipo de servicio, este puede abrir
muchos endpoints, cada cual con su configuracin, por ejemplo se podra utilizar un Service
Host para alojar:

1. Un simple servicio que exponga dos endpoints uno con un binding bsico de HTTP
binding, y otro con un TCP binding, ambos aplicados al mismo contrato.
2. Un simple servicio que exponga tres endpoints, todos aplicados al mismo binding, pero
cada endpoint aplicado a diferentes contratos.
3. Combinaciones de endpoints con varios endpoints y contratos. (la direccin debe ser
nico por endpoint).

Nota: Porque una implementacin de un servicio es una clase que implementa el


contrato del servicio, esto es posible para un servicio que implementa mltiples
contratos de servicio.

Nota: Si algunos de los endppoints hacen uso del mismo bindind para diferentes
contratos, entonces se sugiere utilizar la misma direccin para todos estos endpoints.

Una vez que el servicio es abierto utilizando con el mtodo Open(), este buscar el
archivo de configuracin para la configuracin de los endpoints del servicio, adems del
archivo de configuracin, el service host utilizar los endpoints que son especificados
en el cdigo, el host entonces empezar a escuchar en los puertos especificados en la
configuracin de los endpoints, hasta que este est cerrado.

Nota: Si ocurre un conflicto por ejemplo si dos endpoints utilizan la misma


direccin con diferentes bindings el host lanzar una excepcin durante el mtodo
Open.

Nota: No se puede adicionar nuevos endpoints en un host que est corriendo.

Nota: Si necesita alojar mltiples tipos de servicio, es necesario crear mltiples


instancias de ServiceHost.

Si el servicio est configurado con el modo de instancia Simple, y si tu ya tienes creado


la simple instancia, se puede pasar esa instancia al constructor de Service Host, el
siguiente cdigo muestra como pasar una instancia especifica del servicio al
constructor.
La Clase
System.ServiceModel.ServiceHost
Conceptos clave:

Deriva de ServiceHost, la base puede utilizado para hosts personalizados


Encapsula toda la informacin a cerca de servicio activo (corriendo)
Llama al mtodo Open para empezar a escuchar
Todo cambio en la configuracion require un recycling
El cdigo de Hosting debe ir junto con el manejo de errores

La clase ServiceHost deriva de la clase ServiceHostBase, el cual es una clase abstracta del
cual todas clases derivan y heredan. Las dos mayores hosts que derivan de esta clase son la
clase ServiceHost (utilizado en WCF), y la clase WorflowServiceHost (utilizado en servicio de
Workflows).

La clase ServiceHostBase tiene una propiedad Description, que es una instancia de la clase
ServiceDescription. La clase ServiceDescription contiene toda la informacin necesaria para
correr un servicio incluyendo los behaviors del servicio, y la lista de sus endpoints.

La clase ServiceHost inicializa la descripcin del servicio, entonces la clase base utiliza la
informacin para crear todos los puertos necesarios y canales despachadores para cada
endpoint.

El siguiente cdigo muestra como se puede utilizar la propiedad Description, para imprimir la
lista de todos los endpoints abiertos o disponibles.

Ademas de la propiedad Description, la clase ServiceHostBase provee otras propiedades que


se listan a continuacion:

Propiedad Descripcin

Esta propiedad es una coleccin de todos los canales despachadores abiertos,


ChannelDispatchers se puede utilizar esta propiedad para explorar los despachadores que son
utilizados en el servicio.
Esta propiedad indica el estado del host (por ejemplo, Opened, Closed o
State
Faulted), la propiedad es una instancia del enum Communicationstate
ImplementedContracts Esta propiedad es una coleccin de contratos implementados por el servicio.

Extendiendo el Host:

Si es necesario heredar el comportamiento del service host, se puede derivar de la clase host
para proveer una propia implementacin, o utilizar el patrn del objeto heredado que permita
heredar el comportamiento del service host a travs de objetos externos que escuchan los
cambios de los estados.

Heredar el host utilizando el patron del objeto heredado, se necesita construir una clase que
implemente la interface IExtension<T>, donde T es el tipo que es heredado en este caso, la
clase ServiceHostBase.

La interface IExtension<T> contiene dos mtodos>

Attach. Se llama a este mtodo cuando el objeto heredado es adicionado a la


coleccin de herencias del service host, utilizar este mtodo para conectar a algn
evento que puede afectar el comportamiento que se desee cambiar.
Detach. Se llama este mtodo cuando el objeto heredado es removido de la coleccin
de herencias. Utilizar este mtodo para desbloquear de cualquier evento el cual fue
registrado.

Nota: El mtodo Detach no es llamado cuando el host cierra o esta disponible.

El siguiente cdigo demuestra cmo se puede escribir una extensin que imprime mensajes
cuando el host has sido cerrado o fallado.

Adicionar este objeto heredado al Service host, utilizar el cdigo del siguiente ejemplo:
Limpiando despus de Service Host:

Si se inicializa y se abre el service host (auto-alojamiento), en lugar de alojar en IIS o WAS,


ser necesario atrapar algunas excepciones que pueden aparecer cuando cargamos en el
host. Al abrir un host puede aparecer una excepcin, como por ejemplo:

Hay un error en el archivo de configuracin, que no fue descubierto hasta que es


alojado en el host, como ser olvidar algunos parmetros en la configuracin del
endpoint.
Un endpoint puede utilizar un puerto que ya est en uso por otro proceso.
Hay un conflicto en la configuracin del endpoint, como ser un endpoint que usa un
HTTP binding con una direccin que utiliza el esquema URI net.tcp.
Hay un error de inicializacin del host, como ser pasar la instancia del servicio de
implementacin al constructor del service host sin configurar el modo del contexto de la
instancia del servicio a Single.

Debemos utilizar el mtodo Close para cerrar el service host, en raras ocasiones el mtodo
Close levanta una excepcin, por lo tanto asegurar que se esta utilizando el bloque try/catch y
cuando una excepcin ocurre llamar al mtodo Abort del service host.
Configuracin de Servicios Endpoint

Conceptos clave:
Configurando servicios endpoint en cdigo

myServiceHost = new ServiceHost(typeof(CalcService.WCFCalc));


myServiceHost.AddServiceEndpoint(typeof(ICalc),
new BasicHttpBinding(), new Uri("Http://localhost:8080/Calc"));

Configurando servicios endpoint en un archivo de cconfiguracin XML


myServiceHost = new ServiceHost(typeof(CalcService.WCFCalc));
<service name=CalcService.WCFCalc >
<host>
<baseAddresses>
<add baseAddress=http://localhost:8080 />
</baseAddresses>
<endpoint address=Calc binding=basicHttpBinding
contract=CalcService.Icalc />
</host>
</service>

Es necesario decirle al service host cuales sern los servicios expuestos, esto es posible
hacer a travs de un archivo de configuracin y por cdigo.

El siguiente ejemplo describe como es posible hacer una configuracin (ABC) a travs
de un archivo de configuracin XML que configura un endpoint HTTP.

Alojar un servicio que utiliza un archivo de configuracin es muy similar al siguiente


cdigo:

Tambin es posible crear un endpoint a travs de cdigo, el siguiente cdigo tiene el


mismo efecto como colocar la configuracin del endpoint en el archivo de configuracin
de una aplicacin.
Es una buena prctica evitar cdigos complicados en la configuracin de un endpoint porque
esto frecuentemente depende del ambiente del servicio por ejemplo, un ambiente de
desarrollo, prueba o en produccin.

Nota: Si le preocupa que si alguien podra cambiar el archivo de configuracin, es posible


almacenar la lista de los endpoints en un lugar seguro como ser una base de datos, utilizando
cdigo para leer la configuracin del endpoint, y entonces configurar el servicio de esa
manera.

Nota: El nombre del servicio y el nombre del contrato en el archivo de configuracin son
nombres completos de tipo y debe incluir el tipo del espacio de nombre.
La direccin base del servicio

Conceptos clave:

La direccin base es la principal direccion de escucha


Endpoint services tienen direcciones relativas a la direccion base de servicio
Un servicio puede tener una direccion base por direccion de esquemas
El servicio metadato service puede recuperar utilizando el URI
baseaddress?wsdl/

Si el servicio expone varios endpoints por el mismo tipo de transporte (HTTP, TCP, Named
Pipes), es necesario repetir la parte del prefijo de la direccin del servicio en cada elemento de
la configuracin del endpoint como en el siguiente fragmento XML:

Si necesita cambiar la direccin de los endpoints del ejemplo anterior en el futuro por ejemplo
el nmero de puerto 8080 a 8081, entonces necesitar cambiar cada direccin.

Existe otra manera de configurar las direcciones de los endpoints configurando el host base.
La direccin base en realidad es una coleccin de direcciones, donde cada direccin esta
relacionada a un esquema URI especifico (http, net.tcp, net.msmq), y aparece una sola vez.
Si se especifica una direccin base para su servicio, se puede omitir que parte de la direccin
de la direccin de los endpoints utiliza el mismo esquema URI. El siguiente fragmento XML
muestra como las anteriores configuraciones de los endpoints pueden utilizar la direccin base
del host:

En el ejemplo anterior, el host define una direccin base para el esquema http URI. Cualquier
endpoint que utiliza que el esquema URI puede omitir el prefijo de su atributo address, y
solamente proveer la direccin del sufijo. Porque el host no tiene una direccin base para el
esquema URI net.tcp, el ultimo endpoint aun utiliza la direccin llena. Si se quiere aadir otra
direccin base para el esquema URI net.tcp, necesita adicionar un nuevo elemento add al
elemento baseAddress con una direccin base que tiene el esquema net.tcp, como se
muestra en el siguiente ejemplo.
Tambin es posible definir el la direccin base del servicio a travs de cdigo.

El documento WSDL que describe el servicio configurado en el anterior fragmento de XML

Nota: Para recuperar el documento WSDL, necesitar asegurar que los Behaviors del servicio
incluya el behaviour ServiceMetadata.
Utilizar default endpoints

Conceptos clave:
Default endpoint fue introducido en WCF4
WCF crear un endpoint aun si no hay endpoints de configuracin
El default endpoint binding esta basado en la direccin base; cada esquema
de direccin esta ligado al default binding
Los behaviors sin nombres y bindings son adjuntos al default endpoint
Un protocolo mapping define el mapping entre el esquema de la direccion
y la direccin de los bindings.
<protocolMapping>
<add scheme="http" binding="basicHttpBinding"/>
<add scheme="net.tcp" binding="netTcpBinding"/>
</protocolMapping>

En las anteriores versiones de WCF, si no se tena definido un endpoint en cdigo o en un


archivo de configuracin, el servicio lanzara una excepcin, porque este no puede encontrar
ningn endpoint para su uso. Desde WCF 4.0 se puede alojar un servicio y definir direcciones
base sin tener que definir ningn endpoint especfico.

Si no se especifica ningn endpoint y el servicio tiene por lo menos una direccin base, el host
crear automticamente un endpoint para el servicio de acuerdo a las siguientes reglas:

Address. La direccin del servicio ser idntico a la direccin base definido por el
servicio.

Binding. El binding ser definido segn al default mapping del esquema URI del tipo de
binding, por ejemplo el esquema URI http se vincula al Basic HTTP Binding y el
esquema URI del tipo net.tcp URI se vincula con el binding NetTCP.

Contract. El contrato es definido segn a la interface de contrato de servicio que el


servicio implementa. Si el servicio implementa multiples contratos, entonces el host
crear un endpoint para cada contrato. Y todos los endpoints con el mismo binding que
utilizar la misma direccin.

Ejemplo, vea la clase base y su respectiva implementacin de los contratos:


Demo1: ServiceHost & Direccin Base

Conceptos clave:

Implementar un servicio con la clase ServiceHost


Configurar de los endpoints por codigo y configuracin
Direccion base del servicio
Utilizar Default Endpoints del servicio
Cambiar el mapping

El ejemplo de la demostracin esta ubicada en el siguiente direccin de folder:


Implementar Servicios WCF en IIS 7.0

Conceptos clave:
Los servicios WCF son implementados como aplicaciones web en IIS.
Los servicios WCF son alojados en IIS representados en archivos .svc

La configuracin servicios WCF es escrito en el archivo web.config


<%@ ServiceHost
Language="C#" Debug="true
Service="WcfService.Calculator
CodeBehind="Calculator.svc.cs
Factory="WcfService.CalcHostFactory" %>

IIS utiliza un estilo jerrquico de administracin de directorios, donde cada directorio se une a
un folder en el archivo system. Este Virtual directory puede contener archivos estticos
como ser imgenes y pginas web, tambin aplicaciones web como tambin aplicaciones
ASP.NET Web Forms (una aplicacin compreso de paginas que son esenciales con la
extensin y libraras dinmicas (Dlls)), o un servicio WCF.

Una vez que la aplicacin web inicializa, su configuracin se carga. Con las aplicaciones web,
el archivo de configuracin se llama web.config (en aplicaciones este archivo se llama
app.config). cuando una aplicacin web es cargado en memoria, su archivo web.config es
ledo y procesado. Adems de cargar el archivo web.config que reside en el directorio de la
aplicacin, IIS tambin carga el archivo web.config que reside en el directorio padre que reside
dentro del folder .Net Framework, el cual esta ubicado en
%windir%\Microsoft.Net\Framework\v4.0.xxxxx\web.config.

Nota: El orden para la carga del archivo de configuracin web.config es de arriba hacia abajo.
Primero se carga el archivo de .Net Framework, luego el archivo de la raz del rbol de IIS, y
as sucesivamente hasta llegar al actual archivo de configuracin. Cabe mencionar que el
archivo web.config del actual directorio adiciona o sobrescribe a los anteriores archivos
web.config cargados anteriormente.

El siguiente ejemplo muestra los directorios contenidos dentro del archivo .svc

Nota: El directorio Service especifica el nombre del servicio que se quiere alojar en IIS

Nota: Una aplicacin web puede tener varios servicios y cada servicio con un archivo .svc
Hosting servicios en WAS:

Para hosting de un servicio utilizando WAS sigue los mismos pasos que para IIS, excepto que
ahora es posible utilizar otros protocolos aparte de HTTP. En el siguiente ejemplo se muestra
un archivo de configuracin para WAS.
Implementar Servicios WCF en
Windows Services
Conceptos clave:
Un Windows Service es un executable de larga duracion y que no
requiere intervencion del usuario.
Los Windows Services son gestionados por el Service Control Manager
Windows Service se ejecuta con un diseo de politica de seguridad
Windows Service requiere un proceso de instalacin.

Windows Services son procesos que el sistema operativo implemanta y gestiona.

Windows Service es un proceso que corre por detrs sin que ningn interface de usuario,
haciendo el proceso transparente al usuario que no puede estar enterado de la existencia del
servicio. Los servicios son enfoques adecuados para la implementacin de procesos largos que
no requiere interaccin.

Para la gestin o control de estos servicios, el sistema operativo Windows provee una interface
de usuario llamado Windows Service Control Manager (SCM) o a travs de la herramienta
Windows Management Interface (WMI).

Para esta implementacin se hace uso de la clase ServiceBase, el mismo que se muestra en el
siguiente ejemplo:
Demo2: Hosting en Windows Service

Conceptos clave:

Crear una aplicacion para WCF


Alojar en una aplicacion Windows Service
Verificar el servicio antes de Hosting en IIS7.0
Utilizar el utilitario wcftestutil.exe
Configurar y alojar el servicio en IIS7.0
Verificar la funcionalidad del servicio
Utilizar el utilitario wcftestutil.exe
Demo3: Hosting en IIS

Conceptos clave:

Crear una aplicacion para WCF


Alojar en una aplicacion web
Verificar que este trabaje correctamente
Utilizar el utilitario wcftestutil.exe
Configurar la aplicacin para IIS
Verificar que este funciona con una aplicacion
Utilizar el utilitario wcftestutil.exe
Demo4: Hosting en WAS

Conceptos clave:

Crear una aplicacion para WCF


Alojar en una aplicacion web
Verificar que este trabaje correctamente
Utilizar el utilitario wcftestutil.exe
Configurar la aplicacin para IIS
Verificar que este funciona con una aplicacion
Utilizar el utilitario wcftestutil.exe
Lab: Hosting Servicios WCF

Tareas:

1. Hosting Servicio WCF en IIS7.0


2. Hosting Servicio WCF en WAS
3. Hosting Servicio WCF en Windows Service
4. Hosting Servicio WCF en una aplicacin Consola (self hosting)

Credenciales:
Usuario: Administrator
Contrasea: Pa$$w0rd

Tiempo estimado: 60 mins

Hasta ahora se tiene creado un simple Servicio y un simple Client, ahora se require alojar el
servicio en un servidor IIS 6.0, el mismo que ser consumido por los clientes.

Nota: La herramienta wcftestclient.exe no viene por default en VS2010

Ejercicio 1: Hosting Servicio WCF en IIS7.0:

En esta demostracin se realizara una demostracin implementando un simple servicio en


Visual Studio 2010 y SQL 2008 R2.

Tarea 1: Preparar el servicio:

1. Abrir la solucin Hosting IIS.sln de C:\WCF\Laboratorios\Modulo 2 - Alojamiento de


servicios\Hosting IIS\
2. Verificar que la aplicacin corre como se espera.
3. Note, que esta aplicacin cliente se ejecuta correctamente porque consume el servicio
directamente de la libreara a travs de la Referencia de Servicio.
4. Seleccionar la solucin Hosting IIS y adicionar un nuevo sitio web llamado WebHost.

5. El proyecto se ve como sigue:

6. Eliminar los archivos IService.cs y Service.cs.


7. Aadir la referencia de la librera CustomersServiceLibrary.CustomersService y
renombrar el archivo Service.svc a CustomersService.svc
8. Editar el archivo CustomersService.svc y hacer referencia de la librara
CustomersServiceLibrary.CustomersService:

9. Seleccionar editar el archivo Web.config y hacer dos cambios en cdigo:

10. Seleccionar CustomersService View in Browser y verificar que el servicio funcione


(notar que el servicio esta disponible por el puerto 1045 en mi ejemplo):
Tarea 2: Alojar el servicio en IIS 7.0:

11. Abrir la consola de administracin de IIS 7.0

12. Una ves alojado el servicio en IIS, verificar si el servicio funciona correctamente (Note
que esta vez el servicio no utilice un puerto). Listo para consumo.

Tarea 3: Consumir el servicio provisto por IIS 7.0:

13. Seleccionar el proyecto WindowsClient Service References y eliminar el siguiente


elemento CustomersService:
14. Adicionar referencia del servicio, pero esta vez del servidor IIS (del paso 11).

15. Verificar los resultados: WindowsClient Rebuild F5

Resultado: Usted aprendi a alojar un servicio en IIS 7.0 y consumir desde un cliente con una
a aplicacin Windows.

Ejercicio 2: Hosting Servicio WCF en WAS:

Tarea 1: Preparar el Sitio Web para alojar el servicio en IIS 7.0:

1. Abrir la solucin Hosting WAS.sln de C:\WCF\Modulo02\Lab02\Hosting WAS


2. Presionar F5 y verificar que este funcione correctamente.
3. Seleccionar la solucin Hosting WAS.sln y adicionar un nuevo Sitio Web
4. Repetir los pasos 5, 6, 7, 8, 9, y 10 del anterior Ejercicio 1 (Hosting IIS 7.0).
5. Editar el archivo Web.config y aadir dos endpoints (HTTP y TCP):

6. Verificar los resultados:

7. En caso de tener el siguiente resultado, registrar el protocolo net.tcp en la aplicacin.

%windir%\system32\inetsrv\appcmd.exe set app "WCF/<Your App>" /enabledProtocols:http,net.tcp

Tarea 2: Consumir el servicio provisto por IIS 7.0:

8. Repetir todos los pasos de la Tarea 3 del Ejercicio 2 (Hosting in IIS 7.0).
9. Verificar en el archivo App.config que los bindings HTTP y TCP fueron actualizados:
10. Compilar el proyecto WindowsClient, y ejecutar este proyecto con F5.
11. Verificar los resultados utilizando el WSHttpBinding o NetTcpBinding.

Resultado: Usted aprendi a alojar un servicio en IIS 7.0 con configuracin WAS y consumir
desde un cliente con una a aplicacin Windows.

Ejercicio 3: Hosting Servicio WCF en Windows Service:

Tarea 1: Preparar una aplicacin de servicio:

12. Abrir la solucin Hosting WindowsService.sln del folder


C:\WCF\Modulo02\Lab02\Hosting WindowsService
13. Seleccionar la solucin Hosting WindowsService.sln
14. Adicionar Nuevo Proyecto de Servicio Windows, and rename Service1 to WCFService:
Name: WindowsServiceHost
Location: En la misma ubicacin de la solucin

Tarea 2: Alojar el servicio en la aplicacin de Windows Service:

15. Load the existing item called App.config file from C:\WCF\Modulo02\Lab02\Hosting
WindowsService.
16. Editar el archivo y adicionar un endpoint, el mismo que se ver como sigue:

17. Adicionar referencias de la librera CustomersServiceLibrary.CustomersService


18. Editar el archivo WCFService.cs y adicionar los siguientes espacios de nombres.

using System.ServiceModel;
using CustomersServiceLibrary;

19. Declarar una referencia global como sigue y adicionar cdigo en los eventos OnStart y
OnStop, al final se debera mostrar como sigue:

20. Despus, seleccionar y abrir el archivo WCFService.cs[Design], y aadir instalador

21. Luego debera mostrar los siguientes elementos en el modo diseo:


22. En las propiedades del serviceProcessIbstaller1
Account: NetworkService

23. En las propiedades del serviceInstaller1


DisplayName: CustomersService WCF Service
ServiceName: WCFCustomersService
StartType: Automatic
Description: Description for CustomersService WCF Service

24. Seleccionar el proyecto WindowsServiceHost y Rebuild


25. Abrir la siguiente herramienta de Microsoft: Start All Programs Microsoft Visual
Studio 2010 Visual Studio Tools Visual Studio Command Prompt (2010).
26. Ingresar hasta el folder Debug del proyecto (C:\WCF\Modulo02\Lab02\Hosting
WindowsService\WindowsServiceHost\bin\Debug)

27. Instalar el servicio con el siguiente comando InstallUtil WindowsServiceHost.exe, y


presionar enter.
28. La instalacin es completado exitosamente:

29. Revisar el servicio en la consola services.msc

Tarea 3: Consumir el servicio provisto por la aplicacin Windows Service:

30. Seleccionar el proyecto WindowsClient y eliminar las referencias del servicio.


31. Adicionar las referencias de la librera CustomersServiceLibrary.CustomersService
y System.ServiceModel

32. Seleccionar y eliminar el archivo Form1.cs


33. Cargar un tem Form1.cs existente en el siguiente folder: C:\WCF\Modulo00\Starter
Code, y configurar las siguiente propiedades:

34. Codificar para los eventos FormLoad, ListCustomers, GetDetails y SaveChanges:


Implementar los siguiente snippetes para cada mtodo evento:

Declaracin de variables: Mod02_Form1_Declarations.snippet


FormLoad: Mod02_Form1_Load.snippet
ListCustomers: Mod02_Form1_ListCustomersButton.snippet
GetDetails: Mod02_Form1_GetDetailsButton.snippet
SaveChanges: Mod02_Form1_SaveChanges.snippet

35. Verificar el cdigo Rebuild WindowsClient y el resultado exitosamente.

Nota: La clase proxy necesita hacer uso de la clase ChannelFactory.

36. Seleccionar y editar el archivo App.config, y adicionar los el endpoint correspondiente


en el lado del cliente, similar al App.config de servicio (del paso 8).

37. Ejecutar la aplicacin cliente, y este muestra los datos exitosamente:

38. Ahora pare el servicio CustomersService, y verifique otra vez los resultados.
39. Para desinstalar el servicio, ejecute el siguiente comando.

Resultado: Usted aprendi a alojar un servicio en una aplicacin Windows Service.


Ejercicio 4: Hosting Servicio WCF en una aplicacin de consola (Self Hosting):

40. Aadir nuevo proyecto de una Aplicacin Console


41. Aadir archivo de configuracin y definir un metadata para exponer el servicio
42. Implementar la clase ServiceHost
43. Verificar si el servicio esta listo para su consumo (podra utilizar la herramienta de
Microsoft WcfTestClient.exe)
44. Si todo esta correcto, proceder a consumir en por el cliente.
45. Eliminar la actual referencia del servicio
46. Hacer nueva referencia al servicio provisto por la aplicacin consola.
47. Verificar el consumo del servicio por el cliente

Resultado: Usted aprendi a alojar un servicio en una aplicacin de consola e implementar la


clase ServiceHost.

Você também pode gostar