Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 5 WCF
Clase 5 WCF
Clase 5 WCF
Que es WCF?
Windows Communication Foundation (WCF) es un SDK para el desarrollo y puesta en produccin 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
Que es WCF?
Aunque podemos construir servicios sin WCF, en la practica construirlos utilizando WCF es significativamente mas sencillo
Que es WCF?
WCF es la implementacin de Microsoft de un set de estndares de la industria, que definen entre otras cosas, interaccin entre servicios, conversin de tipos, marshalling, unmarshalling, protocolos, etc.
Que es WCF?
Una de las ventajas que provee WCF, es que simplifica de sobremanera el trabajo con servicios, comparado con plataformas similares
Que es WCF?
La mayora de la funcionalidad de WCF esta incluida en un solo assembly, System.ServiceModel.dll en el namespace System.ServiceModel
Que es WCF?
WCF es parte de .NET 3.0, y adems 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.
Servicios
Un servicio es una unidad de funcionalidad, expuesta al mundo En ese aspecto, es el prximo paso evolutivo en el pasaje de funciones, a objetos a componentes a servicios
Servicios
Arquitectura general
Computacin distribuida
La esencia de este tipo de soluciones, esta en que los proveedores de servicios y los consumidores de servicios, se encuentran en locaciones fsicas diferentes Generalmente la comunicacin es resuelta a travs de una red
10
Corba
11
.NET Remoting
12
Servicios
La orientacin a servicios, es un set abstracto de principios y buenas practicas, para la construccin de aplicaciones orientadas a servicios
13
Servicios
Una aplicacin orientada a servicios (SOA), agrega servicios en una unidad (aplicacin) lgica Es similar a la forma en que un componente o una aplicacin orientada a objetos, combina objetos
14
Servicios
15
Servicios
Un servicio puede ser local o remoto Puede estar desarrollado por una o mltiples partes, utilizando una o mltiples tecnologas Inclusive puede ejecutar en diferentes lneas de tiempo
16
Servicios
Sin embargo, entre servicios, solo los mecanismos de comunicacin establecidos son los que valen
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
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
19
Servicios
Como la implementacin 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
20
Servicios
Los metadatos son publicados utilizando un formato predefinido, neutral tecnolgicamente, por ejemplo, utilizando WSDL sobre HTTP-GET, o algn otro estndar de la industria para intercambio de metadatos
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 informacin y consumirla como clases CLR
22
Execution Boundaries
Con WCF, el cliente nunca interactuara con el servicio directamente, aun en casos locales, o ejecucin 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 mtodos administrativos
Execution Boundaries
Ejecucin en la misma maquina
24
Execution Boundaries
Ejecucin en mltiples maquinas
25
Transparencia locacional
En el pasado, las anteriores tecnologas para computacin distribuida (DCOM, Remoting) aspiraban a proveer el mismo ambiente de programacin para el cliente, sin importar si el objeto es remoto o local
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
27
Transparencia locacional
El problema con este enfoque, es que la comunicacin 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 implementacin
28
Transparencia locacional
Ciclo de vida de los objetos Confiabilidad Manejo del estado Escalabilidad Seguridad
Todo esto es mucho mas complejo, todo porque tratamos de simular un modelo local
29
Transparencia locacional
WCF trata de proveerle al cliente el mismo modelo de programacin, sin importar donde este localizado el servicio Sin embargo, el enfoque de WCF es el opuesto, toma el modelo de programacin remota, y lo lleva al caso local Siempre debemos comunicarnos a travs de un proxy
30
Transparencia locacional
31
Transparencia locacional
32
Direcciones
En WCF, todo servicio esta asociado con una direccin nica La direccin provee dos elementos importantes
o o
La localizacin del servicio El protocolo de transporte (transport schema) usado para comunicarnos con el servicio
33
Transport schemas
HTTP TCP Peer network IPC (Inter-Process Communication sobre named pipes) MSMQ
34
Direcciones
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
36
Contratos
En WCF, todos los servicios exponen contratos Un contrato es una forma estndar de describir lo que hace el servicio Esta descripcin es neutral a nivel de plataforma
37
Contratos
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 Ingeniera Montevideo, Uruguay 39
Service Contract
El atributo ServiceContract mapea una interfaz o una clase CLR a un contrato independiente de la tecnologa En este proceso de exposicin, no interesan aspectos como la visibilidad de la clase o la interfaz
40
Service Contract
En conjunto con lo anterior, ningn miembro de la clase o interfaz ser parte del contrato, a menos que lo especifiquemos explcitamente Debemos hacerlo utilizando el atributo OperationContract, el cual podemos aplicar a mtodos
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 Ingeniera Montevideo, Uruguay 42
Data Contract
Permite definir los elementos intercambiados en los diferentes contratos de los servicios Es una forma de normalizar la serializacin de la informacin a travs de la conexin
43
Data Contract
[DataContract] public class User { [DataMember] public string Name; [DataMember] public string Address; //..etc.. }
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 tecnologa de definir las excepciones que una operacin puede provocar
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; } }
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 Ingeniera Montevideo, Uruguay 47
Fault Contract
En la funcin ponemos
[OperationContract] [FaultContract(typeof(MathFault))] int Divide(int n1, int n2);
48
Fault Contract
49
Faults
Estas pueden ser procesadas por el cliente cuando ocurran, en forma similar a una excepcin
50
Hosting
La clase que implementa el servicio WCF no puede existir en un vaco Todo servicio WCF debe ser hosteado en un proceso de Windows, denominado, el host process Un solo host process puede hostear mltiples servicios, y el mismo servicio puede ser hosteado por mltiples host processes
51
Hosting
IIS (Internet Information Services) WAS (Windows Activation Service) O, en un proceso Windows provisto por el desarrollador
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
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 implementacin del servicio El enfoque es muy similar al utilizado por los servicios web ASMX
54
IIS Hosting
<%@ ServiceHost Language = "C#" Debug = "true" CodeBehind = "~/App_Code/MyService.cs" Service = "MyService" %>
55
Bindings
Tenemos varios patrones de comunicacin, sincrnicos, asincrnicos, etc. Tenemos mltiples protocolos de transporte para los mensajes Tenemos varios formatos de encoding en los mensajes
56
Bindings
Tenemos varias opciones para el tema de la seguridad La entrega del mensaje puede ser confiable o no confiable Podemos tener que interoperar con otros servicios y o clientes Podemos tener que interoperar con clientes legados
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 comunicacin exitosa
58
Bindings
Para simplificar este proceso de eleccin, WCF agrupa estos aspectos de comunicacin, en grupos denominados bindings
59
Bindings
protocolo de transporte encoding de mensajes patrones de comunicacin confiabilidad seguridad propagacin de transacciones interoperabilidad
INCO - Facultad de Ingeniera Montevideo, Uruguay 60
Basic binding TCP binding Peer network binding IPC binding Web Service (WS) binding Federated WS binding Duplex WS binding MSMQ binding MSMQ integration binding
61
Bindings
Los bindings son altamente extensibles Podemos tomar uno existente, y modificar alguna de sus propiedades, en lugar de comenzar de 0
62
Encodings disponibles
63
64
Entonces
Todo servicio esta asociado con una direccin (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
65
Endpoints
Esta terna que gobierna el servicio, se conoce como el ABC del servicio WCF formaliza esta relacin en la forma de un endpoint El endpoint es la fusin de la address, el binding y el contract
66
Endpoints
67
Endpoint
<system.serviceModel> <services> <service name = "MyNamespace.MyService"> <endpoint address = "http://localhost:8000/MyService/" binding = "wsHttpBinding" contract = "MyNamespace.IMyContract" /> </service> </services> </system.serviceModel>
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>
69
Arquitectura de WCF
70