Escolar Documentos
Profissional Documentos
Cultura Documentos
ServiceHost
ServiceHost
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?
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:
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 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
El Service host es responsable de administrar el servicio y sus recursos, las siguientes son
algunos de las responsabilidades de service host:
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.
El host nos provee un modelo de configuracin comprensivo para configurar los servicios y
varias configuraciones de varios hosting.
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.
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:
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:
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:
Es posible utilizar la clase ServiceHost para alojar servicios en cualquier tipo de procesos
Windows.
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.
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: 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.
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.
Propiedad Descripcin
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.
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:
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
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.
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:
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.
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>
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.
Conceptos clave:
Conceptos clave:
Los servicios WCF son implementados como aplicaciones web en IIS.
Los servicios WCF son alojados en IIS representados en archivos .svc
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 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:
Conceptos clave:
Conceptos clave:
Tareas:
Credenciales:
Usuario: Administrator
Contrasea: Pa$$w0rd
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.
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.
Resultado: Usted aprendi a alojar un servicio en IIS 7.0 y consumir desde un cliente con una
a aplicacin Windows.
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.
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:
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:
38. Ahora pare el servicio CustomersService, y verifique otra vez los resultados.
39. Para desinstalar el servicio, ejecute el siguiente comando.