75
Essential Web Services : Programando con .NET y WSE 2.0 Eduardo Mangarelli Eduardo Mangarelli Gabriel Cor Gabriel Cor [email protected] [email protected]

Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor [email protected]

Embed Size (px)

Citation preview

Page 1: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Essential Web Services : Programando con .NET y WSE 2.0

Essential Web Services : Programando con .NET y WSE 2.0

Eduardo MangarelliEduardo MangarelliGabriel CorGabriel [email protected]@paradigma.com.uy

Page 2: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

AgendaAgenda

Arquitecturas Orientadas a ServiciosArquitecturas Orientadas a Servicios

ASMX WebMethodsASMX WebMethods

WSE 2.0 BásicoWSE 2.0 Básico

Características principales de WSE 2.0Características principales de WSE 2.0

API de Mensajería de WSE 2.0API de Mensajería de WSE 2.0

Page 3: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Como era antesComo era antes

Machine AMachine A

RPC (TCP)RPC (TCP)

Machine BMachine B

RPCRPC

NDRNDR

RegistryRegistry RegistryRegistry

IDLIDLproxyproxy

IDLIDLstubstub

discovers machine Bdiscovers machine B

11

22

Communications protocolCommunications protocol

Message formatMessage format

Description languageDescription language33

Discovery mechanismDiscovery mechanism44

22

1144

IDLIDL

33

requestrequest

responseresponse

Page 4: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Sin estándares ni interopSin estándares ni interopTecnologías de objetos diferían en muchas Tecnologías de objetos diferían en muchas manerasmaneras

Interoperabilidad muy complejaInteroperabilidad muy compleja

Encierra a los clientes en la misma Encierra a los clientes en la misma tecnologíatecnología

DCOM CORBA

RPC IIOP

NDR CDR

IDL OMG IDL

RPC Protocol

Message Format

Description

Windows Registry Naming ServiceDiscovery

Java RMI

IIOP or JRMP

Java Ser. Format

Java

RMI Registry or JNDI

Page 5: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Hacia adelanteHacia adelante

Los desarrolladores están cansados de Los desarrolladores están cansados de estar atados a una tecnologíaestar atados a una tecnología

La clave es diseñar una arquitectura que La clave es diseñar una arquitectura que no tenga pre-supuestos acerca de …no tenga pre-supuestos acerca de …

PlataformaPlataforma

LenguajeLenguaje

ObjetosObjetos

RPCRPC

Service Oriented Architecture (SOA)Service Oriented Architecture (SOA)

Page 6: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

El nuevo mundo de SOAEl nuevo mundo de SOA

SOA requiere una visión diferente del SOA requiere una visión diferente del mundomundo

Servicios autónomosServicios autónomos

Fronteras explícitas, asumir Fronteras explícitas, asumir heterogeneidadheterogeneidad

Integración basada en formatos de Integración basada en formatos de mensaje XML (compartir esquemas, no mensaje XML (compartir esquemas, no clases)clases)

Compatibilidad basada en políticasCompatibilidad basada en políticas

Page 7: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Web ServicesWeb Services

Las tecnologías de invocaciónremota (Web Las tecnologías de invocaciónremota (Web services/remoting) son los bloques de services/remoting) son los bloques de construcción de SOA construcción de SOA

Los Webservices representan una Los Webservices representan una revolución basada en XML de tecnologías revolución basada en XML de tecnologías distribuidasdistribuidas

Diseñados alrededor de la interoperatbilidadDiseñados alrededor de la interoperatbilidadProtocolos de comunicación estándarProtocolos de comunicación estándar

Formatos de representación de datos estándarFormatos de representación de datos estándar

Lenguajes de descripción estándarLenguajes de descripción estándar

Mecanismos de descubrimiento estándarMecanismos de descubrimiento estándar

Page 8: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Definición de Web Services Definición de Web Services

Una aplicación o servicio que…Una aplicación o servicio que…Se comunica por protocolos abiertos de Se comunica por protocolos abiertos de InternetInternet

Procesa los mensajes XML empaquetados Procesa los mensajes XML empaquetados en SOAPen SOAP

Describe los mensajes usando un Describe los mensajes usando un esquema XMLesquema XML

Provee una descripción de su interfaz con Provee una descripción de su interfaz con WSDLWSDL

Puede ser descubierto via UDDIPuede ser descubierto via UDDI

Web ServiceWeb Service

Page 9: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

XML 1.0 + NamespacesXML 1.0 + Namespaces

Perfil básico de Web Services (WS-I)Perfil básico de Web Services (WS-I)

XSDXSD

SOAPSOAP

WSDLWSDL

UDDIUDDI

Portable type systemPortable type system

Mensajes serializadosMensajes serializados

EmpaquetadoEmpaquetado

Descripción de EndpointDescripción de Endpoint

Registro de endpointsRegistro de endpoints

Wire protocolsWire protocols

Description languagesDescription languages

Discovery mechanismsDiscovery mechanisms

Detalles en ws-i.orgDetalles en ws-i.org

Page 10: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

UDDI ServerUDDI Server

A la manera de WebServicesA la manera de WebServices

Machine AMachine A

HTTP + SOAPHTTP + SOAP

Machine BMachine B

InvokeInvoke

XMLXMLWSDLWSDLproxyproxy

WSDLWSDLstubstub

11

22

Communications protocolCommunications protocol

Message formatMessage format

Description languageDescription language33

Discovery mechanismDiscovery mechanism44

22

11

4433

Web ServiceWeb Service

WSDLWSDL

WSDLWSDL

WSDLWSDL

WSDLWSDL

requestrequest

responseresponse

Page 11: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

UDDI ServerUDDI Server

A la manera WebServicesA la manera WebServices

Machine AMachine A

TCP + SOAPTCP + SOAP

Machine BMachine B

Send XMLSend XMLMessageMessage

XMLXML

11

22

Communications protocolsCommunications protocols

Message formatMessage format

Description languageDescription language33

Discovery mechanismDiscovery mechanism44

22

11

4433

Web ServiceWeb Service

WSDLWSDL

WSDLWSDL

WSDLWSDL

WSDLWSDL

one-wayone-wayrequestrequest

XMLXML delayed notificationdelayed notification

22

SMTP + SOAPSMTP + SOAP11

Page 12: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Es el perfil básico suficiente?Es el perfil básico suficiente?

El perfil básico (XSD, SOAP, WSDL, El perfil básico (XSD, SOAP, WSDL, UDDI) permite una comunicación UDDI) permite una comunicación básicabásica

Intercambios XML SimplesIntercambios XML Simples

Entre fronteras heterogéneas y servicios Entre fronteras heterogéneas y servicios autónomosautónomos

Compartiendo esquemas que permiten Compartiendo esquemas que permiten abstracciones útilesabstracciones útiles

La mayoría de las aplicaciones La mayoría de las aplicaciones distribuidas necesitan más…distribuidas necesitan más…

Page 13: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Temas NecesariosTemas Necesarios

Los Web Services tienen muchas Los Web Services tienen muchas necesidades en comúnnecesidades en común

Modelo de seguridad orientado a mensajeModelo de seguridad orientado a mensaje

Mensajería confiableMensajería confiable

Soporte a transaccionesSoporte a transacciones

Mecanismos de direccionamiento/ruteoMecanismos de direccionamiento/ruteo

Mensajería asincrónicaMensajería asincrónica

Metadata para políticas/capacidadesMetadata para políticas/capacidades

Soporte a datos binariosSoporte a datos binarios

Page 14: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Framework SOAPFramework SOAP

SOAP provee el framework para atacar SOAP provee el framework para atacar estos temasestos temas

Distinción entre Header/Body permite Distinción entre Header/Body permite extensionesextensiones

<soap:Envelope<soap:Envelope xmlns:soap="...">xmlns:soap="..."> <soap:Header><soap:Header>

</soap:Header></soap:Header> <soap:Body><soap:Body>

</soap:Body></soap:Body></soap:Envelope></soap:Envelope>

<!-- payload --><!-- payload -->

<!-- standardized, pluggable headers --><!-- standardized, pluggable headers -->

Page 15: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Extendiendo SOAPExtendiendo SOAP

SOAP por si mismo no define headersSOAP por si mismo no define headers

Con Well-known headers las Con Well-known headers las aplicaciones pueden negociaraplicaciones pueden negociar

WS-* extiende SOAP con headers WS-* extiende SOAP con headers estándarestándar

Ahora se necesitan implementacionesAhora se necesitan implementaciones

Page 16: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Stack de protocolos WS-* kStack de protocolos WS-* k

Microsoft está trabajando de cerca con Microsoft está trabajando de cerca con partners para desarrollar un protocolo partners para desarrollar un protocolo completo de WS-*completo de WS-*

Ataca la mayoría de los temas vistosAtaca la mayoría de los temas vistos

Construido sobre SOAP de una manera Construido sobre SOAP de una manera neutra al transporteneutra al transporte

Para ofrecer mensajes seguros, Para ofrecer mensajes seguros, confiables y transaccionalesconfiables y transaccionales

Page 17: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Stack WS-* Stack WS-*

FoundationFoundation

Applications Applications & Application& ApplicationInfrastructureInfrastructure

TransportsTransports

Connected Connected ApplicationsApplications ManagementManagement BusinessBusiness

ProcessProcess……

SecuritySecurity ReliabilityReliability TransactionsTransactions

MessagingMessaging

XMLXML

Met

adat

aM

etad

ata

HTTPHTTP TCPTCP SMTPSMTP ……

Page 18: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WS-* Specifications (Resumen)WS-* Specifications (Resumen)

MessagingMessagingWS-AddressingWS-Addressing

WS-Eventing WS-Eventing

MTOM (Attachments)MTOM (Attachments)

ReliabilityReliabilityWS-ReliableMessagingWS-ReliableMessaging

SecuritySecurityWS-SecurityWS-Security

WS-TrustWS-Trust

WS-SecureConversationWS-SecureConversation

WS-FederationWS-Federation

TransactionsTransactionsWS-CoordinationWS-Coordination

WS-AtomicTransactionWS-AtomicTransaction

WS-BusinessActivityWS-BusinessActivity

MetadataMetadataWS-PolicyWS-Policy

WS-PolicyAssertionsWS-PolicyAssertions

WS-PolicyAttachmentWS-PolicyAttachment

WS-SecurityPolicyWS-SecurityPolicy

WS-DiscoveryWS-Discovery

WS-MetadataExchangeWS-MetadataExchange

Ver Ver Especificación en MSDN en MSDN

http://msdn.microsoft.com/webservices/understanding/specs/default.aspxhttp://msdn.microsoft.com/webservices/understanding/specs/default.aspx

Page 19: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Plataforma .NET de Web ServicesPlataforma .NET de Web ServicesASMX es la plataforma actual de WSASMX es la plataforma actual de WS

Soporta el perfil básico de servicios Soporta el perfil básico de servicios simplessimplesNo implementa WS-* No implementa WS-*

WSE 2.0 es una extensiónWSE 2.0 es una extensiónPuede usarse para extender el Puede usarse para extender el comportamiento de ASMX comportamiento de ASMX Puede usarse sin ASMXPuede usarse sin ASMXProvee soporte a varias especificaciones Provee soporte a varias especificaciones WS-*WS-*

Indigo es la próxima generación de WS Indigo es la próxima generación de WS Va a proveer una solución completa WS-* Va a proveer una solución completa WS-*

Page 20: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Resumen hasta ahoraResumen hasta ahora

Un Web Sevice es accesible por protocolos Un Web Sevice es accesible por protocolos estándarestándar

XML es un formato de representación de XML es un formato de representación de datosdatos

SOAP es un framework XML para mensajeríaSOAP es un framework XML para mensajería

Los esquemas XML describen mensajes XMLLos esquemas XML describen mensajes XML

WSDL describe como invocar Web servicesWSDL describe como invocar Web services

UDDI es un repositorio de descripción de UDDI es un repositorio de descripción de serviciosservicios

WS-* extiende SOAP con headers estándarWS-* extiende SOAP con headers estándar

Page 21: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

ASMX WebMethodsASMX WebMethods

Page 22: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WebMethodsWebMethods

WebMethods mapea métodos a mensajes WebMethods mapea métodos a mensajes SOAPSOAP

Los métodos se calfiican con el atributo Los métodos se calfiican con el atributo [WebMethod] [WebMethod]

Se encuentra en el namespace Se encuentra en el namespace System.Web.ServicesSystem.Web.Services

Construido sobre HTTP y un stack XMLConstruido sobre HTTP y un stack XML

Ofrece alta producctividad (solo hay que escribir Ofrece alta producctividad (solo hay que escribir los métodos)los métodos)

<WebMethod()> _<WebMethod()> _Public Function Add(ByVal n1 As Integer, ByVal n2 As Integer) As IntegerPublic Function Add(ByVal n1 As Integer, ByVal n2 As Integer) As Integer Return n1 + n2Return n1 + n2End FunctionEnd Function

Page 23: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Web Service NamespaceWeb Service Namespace

Especifica el namespace XML en la Especifica el namespace XML en la claseclase

Usa el atributo [WebService] Usa el atributo [WebService]

[WebService(Namespace=“[WebService(Namespace=“http://www.paradigma.com.uy/MathService”)”)public class MathServicepublic class MathService{{ [WebMethod][WebMethod] public int Add(int n1, int n2)public int Add(int n1, int n2) {{ return n1 + n2;return n1 + n2; }}}}

Page 24: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Infraestructura del WebMethodInfraestructura del WebMethod

ASP.NET provee la infraestructura para ASP.NET provee la infraestructura para procesar WebMethodsprocesar WebMethods

La clase del WebMethod está “ligada” a La clase del WebMethod está “ligada” a un punto de entrada .asmxun punto de entrada .asmx

El manejador procesa los mensajes de El manejador procesa los mensajes de entrada SOAPentrada SOAP

Page 25: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

using System.Web.Services;using System.Web.Services;

public class MathServicepublic class MathService{{ [WebMethod][WebMethod] public int Add(int n1, int n2)public int Add(int n1, int n2) {{ return n1 + n2;return n1 + n2; }}}}

Un punto de entrdada .asmx Un punto de entrdada .asmx

<%@ WebService class="MathService"%><%@ WebService class="MathService"%>

math.asmxmath.asmx

math.csmath.cs

Page 26: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Instalando un WebMethodInstalando un WebMethod

Una vez implementada, la clase debe Una vez implementada, la clase debe ser instaladaser instalada

El assembly de pone en el bin del El assembly de pone en el bin del directorio virtual o en el GACdirectorio virtual o en el GAC

El archivo .asmx se pone en el directorio El archivo .asmx se pone en el directorio virtualvirtual

\inetpub\inetpub \wwwroot\wwwroot \math \math math.asmxmath.asmx \bin\bin math.dllmath.dll

Directorio virtualDirectorio virtual

Subdirectorio binSubdirectorio bin

Page 27: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

.asmx y compilación JIT.asmx y compilación JIT

El archivo .asmx puede contener código del El archivo .asmx puede contener código del WebMethodWebMethod

Se compila JIT en la primera invocaciónSe compila JIT en la primera invocación<%@WebService language="C#" class="MathService"%><%@WebService language="C#" class="MathService"%>

using System.Web.Services;using System.Web.Services;

public class MathServicepublic class MathService{{ [WebMethod][WebMethod] public int Add(int n1, int n2)public int Add(int n1, int n2) {{ return n1 + n2;return n1 + n2; }}}}

Page 28: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Funcionalidad WebMethod Funcionalidad WebMethod

El manejador .asmx del WebMethod El manejador .asmx del WebMethod provee cuatro áreas de funcionalidadprovee cuatro áreas de funcionalidad

Enviar los mensajes SOAP a los métodos Enviar los mensajes SOAP a los métodos CLRCLR

Serialización/deserialización de objetosSerialización/deserialización de objetos

Generación automática de Generación automática de documentación/WSDLdocumentación/WSDL

Modelo de extensibilidadModelo de extensibilidad

Page 29: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Method DispatchingMethod DispatchingPOST /math/math.asmx HTTP/1.1POST /math/math.asmx HTTP/1.1SOAPAction: "urn:math:Mul"SOAPAction: "urn:math:Mul"

<s:Envelope...><s:Envelope...> <s:Body><s:Body> <x:Mul>...<x:Mul>... </s:Body></s:Body></s:Envelope></s:Envelope>

<%@ WebService language="C#" <%@ WebService language="C#" class="MathService" %>class="MathService" %>using System.Web.Services;using System.Web.Services;

public class MathServicepublic class MathService{{ [WebMethod][WebMethod] public int Add(int n1, int n2) {public int Add(int n1, int n2) { return n1 + n2;return n1 + n2; }} [WebMethod][WebMethod] public int Sub(int n1, int n2) {public int Sub(int n1, int n2) { return n1 - n2;return n1 - n2; }} [WebMethod][WebMethod] public int Mul(int n1, int n2) {public int Mul(int n1, int n2) { return n1 * n2;return n1 * n2; }} ......}}

.asmx .asmx handlerhandlerIISIIS

Page 30: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Serialización de objetos basada en XMLSerialización de objetos basada en XML

Los WebMethods mapean entre XML y Los WebMethods mapean entre XML y los objetoslos objetos

Construido sobre el XmlSerializer Construido sobre el XmlSerializer

Asegura que los objetos mapeen a XML y Asegura que los objetos mapeen a XML y los tipos a XSDlos tipos a XSD

Garantiza la interoperabilidad con otras Garantiza la interoperabilidad con otras plataformasplataformas

No maneja las complejidades de los No maneja las complejidades de los modelos de objetos modernos…modelos de objetos modernos…

Page 31: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Deserialización WebMethod Deserialización WebMethod

Deserialize

Deserialize

<s:Envelope...><s:Envelope...> <s:Body><s:Body> <x:Mul...><x:Mul...> <n1>33.3</n1><n1>33.3</n1> <n2>66.6</n2><n2>66.6</n2> </x:Mul></x:Mul> </s:Body></s:Body></s:Envelope></s:Envelope>

n1 n1 n2 n2

System.IntegerSystem.Integer

<%@ WebService language="C#" <%@ WebService language="C#" class="MathService" %>class="MathService" %>using System.Web.Services;using System.Web.Services;

public class MathServicepublic class MathService{{ [WebMethod][WebMethod] public int Add(int n1, int n2) {public int Add(int n1, int n2) { return n1 + n2;return n1 + n2; }} [WebMethod][WebMethod] public int Sub(int n1, int n2) {public int Sub(int n1, int n2) { return n1 - n2;return n1 - n2; }} [WebMethod][WebMethod] public int Mul(int n1, int n2) {public int Mul(int n1, int n2) { return n1 * n2;return n1 * n2; }} ......}}

.asmx .asmx handlerhandler

Page 32: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Usando tipos complejosUsando tipos complejos

Los WebMethods pueden manejar la Los WebMethods pueden manejar la mayoría de los objetosmayoría de los objetos

Los objetos pueden ser usados como Los objetos pueden ser usados como entrada/salidaentrada/salida

Los objetos mapean a objetos complejos Los objetos mapean a objetos complejos XSDXSD

public class Point {public class Point { public double x; public double x; public double y;public double y;}}public class Geometry {public class Geometry { [WebMethod][WebMethod] public double Distance(Point orig, Point dest) {public double Distance(Point orig, Point dest) { // implementation omitted// implementation omitted }}}}

Page 33: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Ejemplo de tipo complejoEjemplo de tipo complejo

<soap:Envelope xmlns:soap="..."><soap:Envelope xmlns:soap="..."> <soap:Body><soap:Body> <Distance xmlns="urn:geometry"><Distance xmlns="urn:geometry"> <orig><orig> <x>0</x><x>0</x> <y>0</y><y>0</y> </orig></orig> <dest><dest> <x>3</x><x>3</x> <y>4</y><y>4</y> </dest></dest> </Distance></Distance> </soap:Body></soap:Body></soap:Envelope></soap:Envelope>

<soap:Envelope xmlns:soap="..."><soap:Envelope xmlns:soap="..."> <soap:Body><soap:Body> <DistanceResponse <DistanceResponse xmlns="urn:geometry">xmlns="urn:geometry"> <DistanceResult>5</DistanceResult> <DistanceResult>5</DistanceResult> </DistanceResponse></DistanceResponse> </soap:Body></soap:Body></soap:Envelope></soap:Envelope>

requestrequest

responseresponse

Page 34: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

LimitacionesLimitaciones

No todos los tipos del CLR son No todos los tipos del CLR son serializables y pueden “romper” serializables y pueden “romper” escenarios de interoperabilidadescenarios de interoperabilidad

Grafos no jerárquicosGrafos no jerárquicos

Estructuras de datos genéricos Estructuras de datos genéricos (DataSet, Collection, etc.)(DataSet, Collection, etc.)

Objetos polimórficosObjetos polimórficos

Si lo importante es la Si lo importante es la interoperabilidad, se debe simplificarinteroperabilidad, se debe simplificar

Page 35: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WebMethods y ErroresWebMethods y Errores

SOAP define como manejar erroresSOAP define como manejar erroresElemento de falla SOAP en el Body del Elemento de falla SOAP en el Body del mensajemensaje

Código de estado 500 (“Internal Server Código de estado 500 (“Internal Server Error”) HTTP Error”) HTTP

El manejador .asmx traduce las El manejador .asmx traduce las excepciones a fallasexcepciones a fallas

Todas las excepciones del CLR se Todas las excepciones del CLR se capturan por la infraestructuracapturan por la infraestructura

Se puede lanzar un SoapException para Se puede lanzar un SoapException para controlar los detallescontrolar los detalles

Page 36: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Generando documentación/WSDLGenerando documentación/WSDL

El manejador .asmx genera la El manejador .asmx genera la documentacióndocumentación

Es retornada para los requests GET Es retornada para los requests GET sin query stringsin query string

El manejador .asmx genera WSDLEl manejador .asmx genera WSDLSe usa Se usa '?wsdl''?wsdl' en el query string en el query string (ej: math.asmx?wsdl)(ej: math.asmx?wsdl)

Los clientes pueden utilizar el WSDL Los clientes pueden utilizar el WSDL para crear clases proxypara crear clases proxy

Page 37: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WSDL y la generación de códigoWSDL y la generación de código

<wsdl:definitions ...><wsdl:definitions ...> ......</wsdl:definitions></wsdl:definitions>

public abstract class public abstract class MathService : WebServiceMathService : WebService{{ ......}}

service.dllservice.dll

wsdl.exe /serverwsdl.exe /server

public class MathService : public class MathService : SoapHttpClientProtocolSoapHttpClientProtocol{{ ......}}

wsdl.exewsdl.exe

csc.execsc.exe

..asmxasmx

?wsdl?wsdl

Page 38: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Modelo de extensibilidad WebMethodsModelo de extensibilidad WebMethods

El manejador .asmx provee el modeloEl manejador .asmx provee el modeloPermite pre/post procesamiento de mensajes Permite pre/post procesamiento de mensajes SOAPSOAP

Existen puntos de entrada disponibles Existen puntos de entrada disponibles antes/despues de la serialización/deserializaciónantes/despues de la serialización/deserialización

Conocido como el “SoapExtension framework”Conocido como el “SoapExtension framework”

Machine BMachine B

2

1Web Service

SOAPEnvelope

deserialize stagedeserialize stage

serialize stageserialize stage

Page 39: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Limitaciones WebMethodLimitaciones WebMethod

Los WebMethods solo soportan el Los WebMethods solo soportan el perfil básico de WS-I perfil básico de WS-I

No las especificaciones adicionales No las especificaciones adicionales WS-* WS-*

Provee puntos de extensibilidadProvee puntos de extensibilidad

Los WebMethods solo soportan Los WebMethods solo soportan HTTPHTTP

Page 40: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Resumen hasta ahoraResumen hasta ahora

ASP.NET provee un framework de ASP.NET provee un framework de WebServices WS-I completoWebServices WS-I completo

El manejador WebMethod (.asmx) provee El manejador WebMethod (.asmx) provee toda la maquinaria HTTP/XML toda la maquinaria HTTP/XML

Envía los mensajes SOAP al CLREnvía los mensajes SOAP al CLR

Los parámetros son “marshaleados” con la Los parámetros son “marshaleados” con la clase XmlSerializerclase XmlSerializer

Generación automática de Generación automática de documentación/WSDLdocumentación/WSDL

Modelo de extensibilidadModelo de extensibilidad

Page 41: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Introducción a WSE 2.0Introducción a WSE 2.0

Page 42: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

La plataforma de la próxima generaciónLa plataforma de la próxima generación

La plataforma de Web services debe La plataforma de Web services debe evolucionar para cubrir las necesiades evolucionar para cubrir las necesiades comunes (WS-*)comunes (WS-*)

Menajes seguros, confiables y Menajes seguros, confiables y transaccionalestransaccionales

¿Cómo extendemos ASMX para que lo ¿Cómo extendemos ASMX para que lo haga?haga?

Page 43: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

SoapExtension FrameworkSoapExtension Framework

ASMX provee un framework de ASMX provee un framework de extensionesextensiones

Se puede escribir una clase que será Se puede escribir una clase que será llamadallamada

Antes y después de cada mensaje SOAPAntes y después de cada mensaje SOAP

Antes y después de cada punto de Antes y después de cada punto de entrada a un WebMethodentrada a un WebMethod

Page 44: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Etapas SoapExtensionEtapas SoapExtensionLas extensiones se llaman en cada Las extensiones se llaman en cada etapaetapa

ASMX HandlerASMX Handler

Web service classWeb service class

[WebMethod][WebMethod]public int add public int add int x, int y)int x, int y){{ return x+y;return x+y;}}

<soap:Envelope <soap:Envelope … …</soap:Envelope></soap:Envelope>

<soap:Envelope <soap:Envelope … …</soap:Envelope></soap:Envelope>

XmlSerializerXmlSerializer

Extension called (1)Extension called (1) Extension called (2)Extension called (2)

Extension called (3)Extension called (3)Extension called (4)Extension called (4)

Page 45: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Clases SOAP ExtensionClases SOAP Extension

Una clase que derive de Una clase que derive de SoapExtensionSoapExtension

public class ValidationExtension : SoapExtension {public class ValidationExtension : SoapExtension { public override object GetInitializer(Type serviceType) {public override object GetInitializer(Type serviceType) { // class-wide static initialization// class-wide static initialization }} public override object GetInitializer(public override object GetInitializer( LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute) LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute) {{ // method-wide static initialization// method-wide static initialization }} public override void Initialize(object initializer) {public override void Initialize(object initializer) { // per-instance initialization// per-instance initialization }} public override void ProcessMessage(SoapMessage message) {public override void ProcessMessage(SoapMessage message) { // perform pre/post-processing just before/after// perform pre/post-processing just before/after // message deserialization/serialization// message deserialization/serialization }}}}

Page 46: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Configurando una SOAP ExtensionConfigurando una SOAP Extension

Las clases de extensión pueden ser Las clases de extensión pueden ser asociadas con cualquier WebMethod asociadas con cualquier WebMethod en una aplicaciónen una aplicación

La clase se especifica en el web.configLa clase se especifica en el web.configSe llama para cada WebMethod en una Se llama para cada WebMethod en una aplicacióaplicació

La clase puede ser asociada con un La clase puede ser asociada con un WebMethod específicoWebMethod específico

El método se califica con un atributo El método se califica con un atributo personalizado que especifique la personalizado que especifique la extensiónextensiónLa extensión se llama para ese La extensión se llama para ese WebMethodWebMethod

Page 47: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Configurando una SOAP ExtensionConfigurando una SOAP Extension

Para todos los WebMethodPara todos los WebMethod

<configuration><configuration> <system.web><system.web> <webServices><webServices> <soapExtensionTypes><soapExtensionTypes> <add type="ValidationExtension, ValidationTools" <add type="ValidationExtension, ValidationTools" priority="1" group="0" />priority="1" group="0" /> </soapExtensionTypes></soapExtensionTypes> </webServices></webServices> </system.web></system.web></configuration></configuration>

Page 48: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WSE 2.0WSE 2.0

Microsoft creo los Web Services Microsoft creo los Web Services Enhancements (WSE)Enhancements (WSE)

Está en la versión 2.0Está en la versión 2.0

Provee un SoapExtension para usar con Provee un SoapExtension para usar con WebMethodsWebMethods

Provee un API de transporte de mensajes Provee un API de transporte de mensajes neutral que no depende de ASMXneutral que no depende de ASMX

Implementa varias especificaciones WS-*Implementa varias especificaciones WS-*

Page 49: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Soporte WSE 2.0 a WS-*Soporte WSE 2.0 a WS-*

MessagingMessagingWS-AddressingWS-AddressingWS-Eventing WS-Eventing MTOM (Attachments)MTOM (Attachments)

ReliabilityReliabilityWS-ReliableMessagingWS-ReliableMessaging

SecuritySecurityWS-SecurityWS-SecurityWS-TrustWS-TrustWS-SecureConversationWS-SecureConversationWS-FederationWS-Federation

TransactionsTransactionsWS-CoordinationWS-Coordination

WS-AtomicTransactionWS-AtomicTransaction

WS-BusinessActivityWS-BusinessActivity

MetadataMetadataWS-PolicyWS-Policy

WS-PolicyAssertionsWS-PolicyAssertions

WS-PolicyAttachmentWS-PolicyAttachment

WS-SecurityPolicyWS-SecurityPolicy

WS-DiscoveryWS-Discovery

WS-MetadataExchangeWS-MetadataExchange

Implementadas en WSE 2.0Implementadas en WSE 2.0

Page 50: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WSE 1.0 y 2.0WSE 1.0 y 2.0

WSE 2.0 puede ser instalada side-by-side WSE 2.0 puede ser instalada side-by-side con WSE 1.0con WSE 1.0

Usa un nombre de assembly diferenteUsa un nombre de assembly diferente

Usa un namespace diferenteUsa un namespace diferente

La misma token públicaLa misma token pública

WSE 1.0WSE 1.0 WSE 2.0WSE 2.0

AssemblyAssembly Microsoft.Web.ServicesMicrosoft.Web.Services Microsoft.Web.Services2Microsoft.Web.Services2

NamespaceNamespace Microsoft.Web.ServicesMicrosoft.Web.Services Microsoft.Web.Services2Microsoft.Web.Services2

VersionVersion 1.0.0.01.0.0.0 2.0.0.02.0.0.0

Public Key TokenPublic Key Token 31bf3856ad364e3531bf3856ad364e35 31bf3856ad364e3531bf3856ad364e35

Page 51: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Comenzando a usar WSE 2.0Comenzando a usar WSE 2.0

Para comenzar a usar WSE en un WebMethodPara comenzar a usar WSE en un WebMethod1.1. Agregar una referencia a Microsoft.Web.Services2Agregar una referencia a Microsoft.Web.Services2

2.2. Configurar el WebServicesExtensionConfigurar el WebServicesExtension

3.3. Agregar using/imports a los namespaces que se Agregar using/imports a los namespaces que se necesitennecesiten

4.4. Extender el código del WebMethod Extender el código del WebMethod apropiadamenteapropiadamente

// general extension classes// general extension classesusing Microsoft.Web.Services2;using Microsoft.Web.Services2;// if you plan to use WS-Security// if you plan to use WS-Securityusing Microsoft.Web.Services2.Security;using Microsoft.Web.Services2.Security;......

Page 52: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Configuración en web.configConfiguración en web.config

<!--This element adds WSE functionality --><!--This element adds WSE functionality --><configuration><configuration> <system.web><system.web> <webServices><webServices> <soapExtensionTypes><soapExtensionTypes> <add type=<add type= "Microsoft.Web.Services2.WebServicesExtension,"Microsoft.Web.Services2.WebServicesExtension, Microsoft.Web.Services2, Version=2.0.0.0,Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral,Culture=neutral, PublicKeyToken=31bf3856ad364e35" PublicKeyToken=31bf3856ad364e35" priority="1" group="0" />priority="1" group="0" /> </soapExtensionTypes></soapExtensionTypes> </webServices></webServices> <system.web><system.web><configuration><configuration>

Page 53: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Usando SoapContextUsando SoapContext

Dentro de un WebMethod, la Dentro de un WebMethod, la información WSE está disponible via la información WSE está disponible via la clase SoapContext clase SoapContext

[WebService(Namespace="http://example.org/wse/")][WebService(Namespace="http://example.org/wse/")]public class Endpoint1 : WebServicepublic class Endpoint1 : WebService{{ [WebMethod][WebMethod] public string Echo()public string Echo() {{ SoapContext reqCtx = RequestSoapContext.Current;SoapContext reqCtx = RequestSoapContext.Current; SoapContext resCtx = ResponseSoapContext.Current;SoapContext resCtx = ResponseSoapContext.Current; ... // use Soapcontext to interface with the WS-*... // use Soapcontext to interface with the WS-* // implementations// implementations }}}}

Page 54: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Usando WSE en el clienteUsando WSE en el cliente

Los clientes wsdl.exe puede utilizar WSELos clientes wsdl.exe puede utilizar WSECambiar la clase base a WebServicesClientProtocolCambiar la clase base a WebServicesClientProtocol

// wsdl.exe generated proxy// wsdl.exe generated proxy......public class Endpoint1 : public class Endpoint1 : // manually change the base class// manually change the base class Microsoft.Web.Services2.WebServicesClientProtocol {Microsoft.Web.Services2.WebServicesClientProtocol { ......

Endpoint1 e = new Endpoint1();Endpoint1 e = new Endpoint1();SoapContext reqCtx = e.RequestSoapContext;SoapContext reqCtx = e.RequestSoapContext;SoapContext resCtx = e.ResponseSoapContext;SoapContext resCtx = e.ResponseSoapContext;... // use Soapcontext to interface with the WSA... // use Soapcontext to interface with the WSA // implementations// implementations

Page 55: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Configuración adicional de WSEConfiguración adicional de WSE

Se configura WSE con una nueva Se configura WSE con una nueva sección config sección config (microsoft.web.services2)(microsoft.web.services2)

Se debe registrar la sección antes de Se debe registrar la sección antes de usarlausarla

<configuration><configuration> <configSections><configSections> <section name="microsoft.web.services2"<section name="microsoft.web.services2" type="Microsoft.Web.Services2.Configuration.Web type="Microsoft.Web.Services2.Configuration.Web ServicesConfiguration, ServicesConfiguration, Microsoft.Web.Services, Microsoft.Web.Services, Version=2.0.0.0, Version=2.0.0.0, Culture=neutral, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />PublicKeyToken=31bf3856ad364e35" /> </configSections></configSections> ......

Page 56: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

microsoft.web.servicesmicrosoft.web.services

La sección en el config se usa para La sección en el config se usa para configurar:configurar:

SeguridadSeguridad

PolíticaPolítica

RuteoRuteo

DiagnósticosDiagnósticos

FiltrosFiltros

<configuration><configuration> <microsoft.web.services2><microsoft.web.services2> <security> ...<security> ... <policy> ...<policy> ... <referral> ...<referral> ... <diagnostics> ...<diagnostics> ... <filters> ...<filters> ... </microsoft.web.services2></microsoft.web.services2></configuration></configuration>

Page 57: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Integración con Visual Studio .NETIntegración con Visual Studio .NET

WSE 2.0 provee integración con WSE 2.0 provee integración con Visual Studio .NETVisual Studio .NET

Elegir edición “Developer” al isntalarElegir edición “Developer” al isntalar

Clic derecho en proyectoy seleccionar Clic derecho en proyectoy seleccionar “WSE 2 Settings”“WSE 2 Settings”

La herramienta automatiza la La herramienta automatiza la configuración del configconfiguración del config

Page 58: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Herramienta WSE SettingsHerramienta WSE Settings

Permite …Permite …Agregar la referencia Agregar la referencia al assembly WSE al assembly WSE

Configurar el Configurar el SoapExtensionSoapExtension

Configurar el Configurar el soporte a protocolo soporte a protocolo WS-* WS-*

Page 59: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Integración Cliente con Visual Studio .NET Integración Cliente con Visual Studio .NET

Puede habilitarse WSE en proyectos Puede habilitarse WSE en proyectos cliente con la herramientacliente con la herramienta

Cunado se agrega una “Web Cunado se agrega una “Web Reference”, genera dos clases proxyReference”, genera dos clases proxy

Una que usa WSE Una que usa WSE (ej: “MathServiceWse”)(ej: “MathServiceWse”)

Y una que no lo usa (ej: "MathService")Y una que no lo usa (ej: "MathService")

Page 60: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WSE 2.0 TracingWSE 2.0 Tracing

WSE ofrece tracing de mensajes built-inWSE ofrece tracing de mensajes built-inRegistra todos los mensajes SOAP de Registra todos los mensajes SOAP de entrada/salidaentrada/salida

Registra los match de políticasRegistra los match de políticas

// enable tracing in app.config or web.config// enable tracing in app.config or web.config<configuration><configuration> <microsoft.web.services2> <microsoft.web.services2> <diagnostics><diagnostics>

<trace enabled="true" <trace enabled="true" input="inputtrace.xml" input="inputtrace.xml" output="outputtrace.xml"/>output="outputtrace.xml"/> </diagnostics> </diagnostics> </microsoft.web.services2></microsoft.web.services2>......

Page 61: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Características claves de WSE 2.0 Características claves de WSE 2.0

Page 62: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Soporte a seguridad WSE 2.0Soporte a seguridad WSE 2.0

WSE 2.0 soporta WS-SecurityWSE 2.0 soporta WS-SecurityAutenticación (UsernameToken, X.509, Kerb)Autenticación (UsernameToken, X.509, Kerb)

Integridad (XML signatures)Integridad (XML signatures)

Privacidad (XML encryption)Privacidad (XML encryption)

WSE 2.0 soporta WS-Trust y WSE 2.0 soporta WS-Trust y WS-SecureConversationWS-SecureConversation

Usando tokens de seguridad de contextoUsando tokens de seguridad de contexto

Conversación segura “automática”Conversación segura “automática”

WSE 2.0 soporta seguridad basada en rolesWSE 2.0 soporta seguridad basada en rolesIPrincipal, IsInRole, etc.IPrincipal, IsInRole, etc.

Page 63: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Soporte a Policy WSE 2.0Soporte a Policy WSE 2.0

WSE 2.0 soporta WS-PolicyWSE 2.0 soporta WS-PolicyUna policy es un archivo de configuración que Una policy es un archivo de configuración que especifica los requerimientos para los mensajesespecifica los requerimientos para los mensajes

También soporta WS-PolicyAssertion y También soporta WS-PolicyAssertion y WS-SecurityPolicyWS-SecurityPolicy

WSE 2.0 usa las policies de dos manerasWSE 2.0 usa las policies de dos manerasFuerza las políticas cuando se reciben los Fuerza las políticas cuando se reciben los mensajesmensajes

Puede aplicar políticas (para modificar el mensaje) Puede aplicar políticas (para modificar el mensaje) cuando se envíancuando se envían

WSE 2.0 soporta custom policy WSE 2.0 soporta custom policy

Page 64: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WSE 2.0 Addressing y RoutingWSE 2.0 Addressing y Routing

WSE 2.0 usa WS-Addressing para rutear WSE 2.0 usa WS-Addressing para rutear y entregar mensajesy entregar mensajes

WSE 2.0 provee un manejador de ruteoWSE 2.0 provee un manejador de ruteoSoporta WS-Referral para instrucciones de Soporta WS-Referral para instrucciones de ruteoruteo

Soporta ruteo basado en contenidoSoporta ruteo basado en contenido

WSE 2.0 provee opciones de ruteo WSE 2.0 provee opciones de ruteo seguroseguro

Page 65: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

API de Mensajería WSE 2.0 API de Mensajería WSE 2.0

Page 66: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

API de Mensajería WSE API de Mensajería WSE

ASMX está atado a HTTP, RPC, y métodosASMX está atado a HTTP, RPC, y métodosHace pensar en “client/server”Hace pensar en “client/server”

El API de mensajería de WSE 2.0 ofrece un El API de mensajería de WSE 2.0 ofrece un modelo más flexiblemodelo más flexible

Basado en mensaje - (not necesariamente Basado en mensaje - (not necesariamente método)método)

Independiente de transporte (in-proc, TCP, and Independiente de transporte (in-proc, TCP, and HTTP)HTTP)

Permite mensajería asincrónicaPermite mensajería asincrónica

Patrones de intercambio de mensajes Patrones de intercambio de mensajes personalizados (MEPs)personalizados (MEPs)

Page 67: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Senders y ReceiversSenders y Receivers

WSE permite pensar en términos de WSE permite pensar en términos de “senders” y “receivers”“senders” y “receivers”

Algunos nodos envían mientras otros Algunos nodos envían mientras otros reciben mensajesreciben mensajes

Los roles son completamente Los roles son completamente intercambiablesintercambiables

Expuestos via SoapSender y Expuestos via SoapSender y SoapReceiverSoapReceiver

SenderSender Receiver and Receiver and SenderSender ReceiverReceiver

Page 68: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Transparencia de transporteTransparencia de transporte

WSE 2.0 permite enviar mensajes por WSE 2.0 permite enviar mensajes por diferentes transportesdiferentes transportes

In-proc, TCP, and HTTP out-of-the-boxIn-proc, TCP, and HTTP out-of-the-box

Transportes personalizadosTransportes personalizadosSOAP intermediariesSOAP intermediaries

initialinitialsendersender

ultimateultimatereceiverreceiver

HTTPHTTPSMTPSMTP

MSMQMSMQ

FTPFTP

Page 69: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

SoapReceiverSoapReceiver

SoapReceiver encapsula el proceso de SoapReceiver encapsula el proceso de recibir un mensajes SOAPrecibir un mensajes SOAP

public class MathReceiver : SoapReceiverpublic class MathReceiver : SoapReceiver{{ protected override void Receive(SoapEnvelope e)protected override void Receive(SoapEnvelope e) {{ // implement Receive here// implement Receive here }}}} ......

Uri receiverUri = new EndpointReference(Uri receiverUri = new EndpointReference( new Uri("soap.tcp://localhost/math"));new Uri("soap.tcp://localhost/math"));MathReceiver math = new MathReceiver();MathReceiver math = new MathReceiver();SoapReceivers.Add(receiverUri, math);SoapReceivers.Add(receiverUri, math);......

Page 70: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

SoapSenderSoapSender

SoapSender encapsula el proceso de SoapSender encapsula el proceso de enviar un mensaje SOAP a una URIenviar un mensaje SOAP a una URI

......SoapEnvelope env = CreateAddMessage();SoapEnvelope env = CreateAddMessage();env.Context.Action = "urn:math:add";env.Context.Action = "urn:math:add";SoapSender ss = new SoapSender(new SoapSender ss = new SoapSender(new EndpointReference( EndpointReference( Uri("soap.tcp://localhost/math")));Uri("soap.tcp://localhost/math")));ss.Send(env);ss.Send(env);......

Page 71: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

SoapClient y SoapServerSoapClient y SoapServer

SoapClient y SoapServer ofrecen SoapClient y SoapServer ofrecen abstracciones de alto nivelabstracciones de alto nivel

Construidos sobre SoapSender y Construidos sobre SoapSender y SoapReceiverSoapReceiver

Mensajes de request/response y de Mensajes de request/response y de correlación automáticacorrelación automática

public class MathService : SoapServicepublic class MathService : SoapService{{ [SoapMethod("urn:math:add")][SoapMethod("urn:math:add")] public SoapEnvelope Add(SoapEnvelope e)public SoapEnvelope Add(SoapEnvelope e) {{ ... // implement Add here... // implement Add here }} ......}}

Page 72: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

WseWsdl2.exeWseWsdl2.exe

WseWsdl2.exe genera código WseWsdl2.exe genera código SoapClient de definiciones WSDLSoapClient de definiciones WSDL

El código generado deriva de SoapClientEl código generado deriva de SoapClient

Se puede usar esta clase para enviar Se puede usar esta clase para enviar mensajes SOAP a receptores SOAP via mensajes SOAP a receptores SOAP via WSE 2.0WSE 2.0

Page 73: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

Resumen Resumen

Microsoft's Web Services Microsoft's Web Services Enhancements (WSE) provee Enhancements (WSE) provee implementación WS-* para usar en .NET implementación WS-* para usar en .NET hoyhoy

WSE 2.0 extiende el framework de WSE 2.0 extiende el framework de WebMethod WebMethod

WSE 2.0 provee integración con Visual WSE 2.0 provee integración con Visual Studio .NETStudio .NET

Page 74: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

ReferenciasReferencias

MSDN WS Developer Center MSDN WS Developer Center http://msdn.microsoft.com/webserviceshttp://msdn.microsoft.com/webservices

www.paradigma.com.uy/guunetwww.paradigma.com.uy/guunet

Page 75: Essential Web Services : Programando con.NET y WSE 2.0 Eduardo Mangarelli Gabriel Cor gabriel@paradigma.com.uy

© 2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.