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
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
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
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
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)
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
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
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
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
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
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
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…
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
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 -->
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
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
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 ……
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
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-*
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
ASMX WebMethodsASMX WebMethods
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
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; }}}}
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
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
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
.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; }}}}
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
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
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…
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
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 }}}}
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
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
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
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
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
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
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
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
Introducción a WSE 2.0Introducción a WSE 2.0
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?
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
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)
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 }}}}
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
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>
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-*
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
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
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;......
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>
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 }}}}
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
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> ......
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>
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
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-*
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")
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>......
Características claves de WSE 2.0 Características claves de WSE 2.0
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.
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
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
API de Mensajería WSE 2.0 API de Mensajería WSE 2.0
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)
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
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
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);......
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);......
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 }} ......}}
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
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
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
© 2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.