Taller de Sistemas de Información 1 Clase 5 WCF
Que es WCF? Windows Communication Foundation (WCF) es un SDK para el desarrollo y puesta en producción de servicios en plataforma Windows WCF provee un runtime para los servicios, permitiendo exponer tipos CLR como servicios, y consumir otros servicios como tipos CLR INCO - Facultad de Ingeniería Montevideo, Uruguay 2
Que es WCF? Aunque podemos construir servicios sin WCF, en la practica construirlos utilizando WCF es significativamente mas sencillo INCO - Facultad de Ingeniería Montevideo, Uruguay 3
Que es WCF? WCF es la implementación de Microsoft de un set de estándares de la industria, que definen entre otras cosas, interacción entre servicios, conversión de tipos, marshalling, unmarshalling, protocolos, etc. INCO - Facultad de Ingeniería Montevideo, Uruguay 4
Que es WCF? Una de las ventajas que provee WCF, es que simplifica de sobremanera el trabajo con servicios, comparado con plataformas similares INCO - Facultad de Ingeniería Montevideo, Uruguay 5
Que es WCF? La mayoría de la funcionalidad de WCF esta incluida en un solo assembly, System.ServiceModel.dll en el namespace System.ServiceModel INCO - Facultad de Ingeniería Montevideo, Uruguay 6
Que es WCF? WCF es parte de.net 3.0, y además requiere.net 2.0 Solo puede ejecutar en sistemas operativos que los soporten, como ser Windows Vista (cliente y servidor), Windows XP SP2, Windows Server 2003 SP1, etc. INCO - Facultad de Ingeniería Montevideo, Uruguay 7
Servicios Un servicio es una unidad de funcionalidad, expuesta al mundo En ese aspecto, es el próximo paso evolutivo en el pasaje de funciones, a objetos a componentes a servicios INCO - Facultad de Ingeniería Montevideo, Uruguay 8
Servicios Arquitectura general INCO - Facultad de Ingeniería Montevideo, Uruguay 9
Computación distribuida La esencia de este tipo de soluciones, esta en que los proveedores de servicios y los consumidores de servicios, se encuentran en locaciones físicas diferentes Generalmente la comunicación es resuelta a través de una red INCO - Facultad de Ingeniería Montevideo, Uruguay 10
Corba INCO - Facultad de Ingeniería Montevideo, Uruguay 11
.NET Remoting INCO - Facultad de Ingeniería Montevideo, Uruguay 12
Servicios La orientación a servicios, es un set abstracto de principios y buenas practicas, para la construcción de aplicaciones orientadas a servicios INCO - Facultad de Ingeniería Montevideo, Uruguay 13
Servicios Una aplicación orientada a servicios (SOA), agrega servicios en una unidad (aplicación) lógica Es similar a la forma en que un componente o una aplicación orientada a objetos, combina objetos INCO - Facultad de Ingeniería Montevideo, Uruguay 14
Servicios INCO - Facultad de Ingeniería Montevideo, Uruguay 15
Servicios Un servicio puede ser local o remoto Puede estar desarrollado por una o múltiples partes, utilizando una o múltiples tecnologías Inclusive puede ejecutar en diferentes líneas de tiempo INCO - Facultad de Ingeniería Montevideo, Uruguay 16
Servicios Dentro de un servicio, vamos a encontrar conceptos como o o o o o Lenguajes Tecnologías Plataformas Versiones Frameworks Sin embargo, entre servicios, solo los mecanismos de comunicación establecidos son los que valen INCO - Facultad de Ingeniería Montevideo, Uruguay 17
Servicios El cliente de un servicio es simplemente la entidad que consume su funcionalidad El cliente puede ser casi cualquier cosa.net o no.net o Un Windows form, una pagina ASP.NET, otro servicio, etc. INCO - Facultad de Ingeniería Montevideo, Uruguay 18
Servicios Los servicios WCF pueden comunicarse sobre una variedad de protocolos, no solo HTTP Los clientes WCF pueden interoperar con servicios WCF, y los servicios WCF pueden interactuar con clientes no WCF INCO - Facultad de Ingeniería Montevideo, Uruguay 19
Servicios Como la implementación de un servicio es opaca al mundo exterior, un servicio WCF expone generalmente metadatos Estos metadatos describen la funcionalidad disponible, así como posibles formas de comunicarse con el servicio INCO - Facultad de Ingeniería Montevideo, Uruguay 20
Servicios Los metadatos son publicados utilizando un formato predefinido, neutral tecnológicamente, por ejemplo, utilizando WSDL sobre HTTP-GET, o algún otro estándar de la industria para intercambio de metadatos INCO - Facultad de Ingeniería Montevideo, Uruguay 21
Servicios Un cliente no WCF, puede importar los datos en su ambiente nativo, creando los tipos de datos necesarios para poder interactuar con el servicio Lo mismo ocurre con un cliente WCF, solo que este puede importar la información y consumirla como clases CLR INCO - Facultad de Ingeniería Montevideo, Uruguay 22
Execution Boundaries Con WCF, el cliente nunca interactuara con el servicio directamente, aun en casos locales, o ejecución in-memory En vez de esto, el cliente siempre habla con un proxy, el cual se encarga de forwardear la llamada al servicio El proxy expone las mismas operaciones que el servicio, así como otros métodos administrativos INCO - Facultad de Ingeniería Montevideo, Uruguay 23
Execution Boundaries Ejecución en la misma maquina INCO - Facultad de Ingeniería Montevideo, Uruguay 24
Execution Boundaries Ejecución en múltiples maquinas INCO - Facultad de Ingeniería Montevideo, Uruguay 25
Transparencia locacional En el pasado, las anteriores tecnologías para computación distribuida (DCOM, Remoting) aspiraban a proveer el mismo ambiente de programación para el cliente, sin importar si el objeto es remoto o local INCO - Facultad de Ingeniería Montevideo, Uruguay 26
Transparencia locacional En el caso de una llamada local, el cliente utilizaba una referencia directa al objeto Cuando tenia que interactuar con un objeto remoto, utilizaba un proxy INCO - Facultad de Ingeniería Montevideo, Uruguay 27
Transparencia locacional El problema con este enfoque, es que la comunicación remota es mucho mas compleja que la local Tratar de llevar el modelo remoto en local, no es sencillo, presentando problemas tanto de desarrollo e implementación INCO - Facultad de Ingeniería Montevideo, Uruguay 28
Transparencia locacional Tenemos aspectos complejos, como o Ciclo de vida de los objetos o Confiabilidad o Manejo del estado o Escalabilidad o Seguridad Todo esto es mucho mas complejo, todo porque tratamos de simular un modelo local INCO - Facultad de Ingeniería Montevideo, Uruguay 29
Transparencia locacional WCF trata de proveerle al cliente el mismo modelo de programación, sin importar donde este localizado el servicio Sin embargo, el enfoque de WCF es el opuesto, toma el modelo de programación remota, y lo lleva al caso local Siempre debemos comunicarnos a través de un proxy INCO - Facultad de Ingeniería Montevideo, Uruguay 30
Transparencia locacional INCO - Facultad de Ingeniería Montevideo, Uruguay 31
Transparencia locacional INCO - Facultad de Ingeniería Montevideo, Uruguay 32
Direcciones En WCF, todo servicio esta asociado con una dirección única La dirección provee dos elementos importantes o La localización del servicio o El protocolo de transporte (transport schema) usado para comunicarnos con el servicio INCO - Facultad de Ingeniería Montevideo, Uruguay 33
Transport schemas WCF soporta los siguientes esquemas o o o o o HTTP TCP Peer network IPC (Inter-Process Communication sobre named pipes) MSMQ INCO - Facultad de Ingeniería Montevideo, Uruguay 34
Direcciones Las direcciones siempre tienen el formato: o [base address]/[optional URI] La dirección base siempre esta en este formato: o [transport]://[machine or domain][:optional port] INCO - Facultad de Ingeniería Montevideo, Uruguay 35
Direcciones http://localhost:8001 http://localhost:8001/myservice net.tcp://localhost:8002/myservice net.pipe://localhost/mypipe net.msmq://localhost/private/myservice net.msmq://localhost/myservice INCO - Facultad de Ingeniería Montevideo, Uruguay 36
Contratos En WCF, todos los servicios exponen contratos Un contrato es una forma estándar de describir lo que hace el servicio Esta descripción es neutral a nivel de plataforma INCO - Facultad de Ingeniería Montevideo, Uruguay 37
Contratos WCF define cuatro tipos de contrato o o o o Service contracts Data contracts Fault contracts Message contracts INCO - Facultad de Ingeniería Montevideo, Uruguay 38
Service Contract [ServiceContract] interface IMyContract { [OperationContract] string MyMethod(string text); string MyOtherMethod(string text); } class MyService : IMyContract { public string MyMethod(string text) { return "Hello " + text; } public string MyOtherMethod(string text) { return "Cannot call this method over WCF"; } } INCO - Facultad de Ingeniería Montevideo, Uruguay 39
Service Contract El atributo ServiceContract mapea una interfaz o una clase CLR a un contrato independiente de la tecnología En este proceso de exposición, no interesan aspectos como la visibilidad de la clase o la interfaz INCO - Facultad de Ingeniería Montevideo, Uruguay 40
Service Contract En conjunto con lo anterior, ningún miembro de la clase o interfaz será parte del contrato, a menos que lo especifiquemos explícitamente Debemos hacerlo utilizando el atributo OperationContract, el cual podemos aplicar a métodos INCO - Facultad de Ingeniería Montevideo, Uruguay 41
Operation Contract [ServiceContract] interface IMyContract { [OperationContract] string MyMethod(string text); string MyOtherMethod(string text); } class MyService : IMyContract { public string MyMethod(string text) { return "Hello " + text; } public string MyOtherMethod(string text) { return "Cannot call this method over WCF"; } } INCO - Facultad de Ingeniería Montevideo, Uruguay 42
Data Contract Permite definir los elementos intercambiados en los diferentes contratos de los servicios Es una forma de normalizar la serialización de la información a través de la conexión INCO - Facultad de Ingeniería Montevideo, Uruguay 43
Data Contract [DataContract] public class User { [DataMember] public string Name; [DataMember] public string Address; } //..etc.. INCO - Facultad de Ingeniería Montevideo, Uruguay 44
Fault Contract Permite definir los diferentes tipos de errores que puedo recibir a la hora de interactuar con un servicio Es una forma independiente de la tecnología de definir las excepciones que una operación puede provocar INCO - Facultad de Ingeniería Montevideo, Uruguay 45
Fault Contract [ServiceContract] public class CalculatorService { [OperationContract] int Divide(int a, int b) { if (b==0) throw new Exception( Division by zero! ); return a/b; } } INCO - Facultad de Ingeniería Montevideo, Uruguay 46
Fault Contract // Define a math fault data contract [DataContract(Namespace="http://Microsoft.ServiceModel.Samples")] public class MathFault { private string operation; private string problemtype; } [DataMember] public string Operation { get { return operation; } set { operation = value; } } [DataMember] public string ProblemType { get { return problemtype; } set { problemtype = value; } } INCO - Facultad de Ingeniería Montevideo, Uruguay 47
Fault Contract En la función ponemos [OperationContract] [FaultContract(typeof(MathFault))] int Divide(int n1, int n2); INCO - Facultad de Ingeniería Montevideo, Uruguay 48
Fault Contract Lo que nos habilita a hacer throw new FaultException<MathFault>( new MathFault( Division, Division by zero )); INCO - Facultad de Ingeniería Montevideo, Uruguay 49
Faults Estas pueden ser procesadas por el cliente cuando ocurran, en forma similar a una excepción try {... catch (FaultException<MathFault> mathfault) { Console.WriteLine(mathFault.Detail.ProblemType); Console.ReadLine(); wcfclient.abort(); } INCO - Facultad de Ingeniería Montevideo, Uruguay 50
Hosting La clase que implementa el servicio WCF no puede existir en un vacío Todo servicio WCF debe ser hosteado en un proceso de Windows, denominado, el host process Un solo host process puede hostear múltiples servicios, y el mismo servicio puede ser hosteado por múltiples host processes INCO - Facultad de Ingeniería Montevideo, Uruguay 51
Hosting El hosting puede ser provisto por o IIS (Internet Information Services) o WAS (Windows Activation Service) o O, en un proceso Windows provisto por el desarrollador INCO - Facultad de Ingeniería Montevideo, Uruguay 52
IIS Hosting Este hosting es muy interesante, ya que permite que todo el ciclo de vida sea controlado por el IIS, sin que el desarrollador deba preocuparse del proceso INCO - Facultad de Ingeniería Montevideo, Uruguay 53
IIS Hosting La forma de realizar el deploy, es creando un directorio virtual en el IIS, y colocando alli un archivo.svc, el cual identifica el code behind que provee la implementación del servicio El enfoque es muy similar al utilizado por los servicios web ASMX INCO - Facultad de Ingeniería Montevideo, Uruguay 54
IIS Hosting <%@ ServiceHost Language = "C#" Debug = "true" CodeBehind = "~/App_Code/MyService.cs" Service = "MyService" %> INCO - Facultad de Ingeniería Montevideo, Uruguay 55
Bindings Existen múltiples aspectos en la comunicación entre dos servicios o Tenemos varios patrones de comunicación, sincrónicos, asincrónicos, etc. o Tenemos múltiples protocolos de transporte para los mensajes o Tenemos varios formatos de encoding en los mensajes INCO - Facultad de Ingeniería Montevideo, Uruguay 56
Bindings o Tenemos varias opciones para el tema de la seguridad o La entrega del mensaje puede ser confiable o no confiable o Podemos tener que interoperar con otros servicios y o clientes o Podemos tener que interoperar con clientes legados INCO - Facultad de Ingeniería Montevideo, Uruguay 57
Bindings Si empezamos a contar todas las opciones posibles, veremos que las combinaciones son muchas (varios cientos tal vez) Algunas de estas opciones son mutuamente excluyentes, y algunas otras requeridas Claramente, cliente y servicio deben estar alineados, si queremos tener una comunicación exitosa INCO - Facultad de Ingeniería Montevideo, Uruguay 58
Bindings Para simplificar este proceso de elección, WCF agrupa estos aspectos de comunicación, en grupos denominados bindings INCO - Facultad de Ingeniería Montevideo, Uruguay 59
Bindings Un binding es un conjunto de opciones, consistente entre si, relacionadas con: o protocolo de transporte o encoding de mensajes o patrones de comunicación o confiabilidad o seguridad o propagación de transacciones o interoperabilidad INCO - Facultad de Ingeniería Montevideo, Uruguay 60
Bindings por defecto Basic binding TCP binding Peer network binding IPC binding Web Service (WS) binding Federated WS binding Duplex WS binding MSMQ binding MSMQ integration binding INCO - Facultad de Ingeniería Montevideo, Uruguay 61
Bindings Los bindings son altamente extensibles Podemos tomar uno existente, y modificar alguna de sus propiedades, en lugar de comenzar de 0 INCO - Facultad de Ingeniería Montevideo, Uruguay 62
Encodings disponibles INCO - Facultad de Ingeniería Montevideo, Uruguay 63
Selección del binding INCO - Facultad de Ingeniería Montevideo, Uruguay 64
Entonces Todo servicio esta asociado con una dirección (address) que define donde se encuentra el servicio Un binding que define como comunicarnos con el servicio Un contrato (contract) que define que hace el servicio INCO - Facultad de Ingeniería Montevideo, Uruguay 65
Endpoints Esta terna que gobierna el servicio, se conoce como el ABC del servicio WCF formaliza esta relación en la forma de un endpoint El endpoint es la fusión de la address, el binding y el contract INCO - Facultad de Ingeniería Montevideo, Uruguay 66
Endpoints INCO - Facultad de Ingeniería Montevideo, Uruguay 67
Endpoint Se configura declarativa y/o programaticamente al construir el servicio <system.servicemodel> <services> <service name = "MyNamespace.MyService"> <endpoint address = "http://localhost:8000/myservice/" binding = "wshttpbinding" contract = "MyNamespace.IMyContract" /> </service> </services> </system.servicemodel> INCO - Facultad de Ingeniería Montevideo, Uruguay 68
Endpoint <service name = "MyService"> <endpoint address = "http://localhost:8000/myservice/" binding = "wshttpbinding" contract = "IMyContract" /> <endpoint address = "net.tcp://localhost:8001/myservice/" binding = "nettcpbinding" contract = "IMyContract" /> <endpoint address = "net.tcp://localhost:8002/myservice/" binding = "nettcpbinding" contract = "IMyOtherContract" /> </service> INCO - Facultad de Ingeniería Montevideo, Uruguay 69
Arquitectura de WCF INCO - Facultad de Ingeniería Montevideo, Uruguay 70