470 likes | 566 Views
Arquitecturas orientadas a servicios .NET y Servicios Web: Creación y extensión con WSE 2.0 Leonardo Diez Dolinski | Danysoft. Haciendo visible el camino a .NET IV Encuentro de programadores Microsoft & Danysoft. Agenda. Introducción a XML Servicios Web Desarrollo de Servicios Web con .NET
E N D
Arquitecturas orientadas a servicios.NET y Servicios Web: Creación y extensión con WSE 2.0Leonardo Diez Dolinski | Danysoft Haciendo visible el camino a .NETIV Encuentro de programadores Microsoft & Danysoft
Agenda • Introducción a XML • Servicios Web • Desarrollo de Servicios Web con .NET • Servicios web avanzados: WSE 2.0
Documentos XML¿Por qué XML? • Estándar para intercambio de datos • Entendible a los humanos • Múltiples plataformas • Fácil de extender • Define tanto contenido como estructura • Separado de la presentación
Documentos XMLEstructura Declaración XML Comentario <?xml version=“1.0” encoding=“utf-8”?> <!-– Ejemplo de comentario --> <Pedidos> <Pedido descuento=“no”> <idarticulo>12345</idarticulo> <nombre>Lápiz</nombre> </Pedido> </Pedidos> Elemento de documento Atributo Elemento Texto contenido
Documentos XMLNamespaces <Pedidos xmlns=“http://mycompany.com”> <Pedido> <idarticulo>12345</idarticulo> </Pedido> </Pedidos> Namespace por defecto Namespace explícito <myns:Pedidos xmlns:myns=“http://mycompany.com”> <myns:Pedido> <myns:idarticulo>12345</myns:idarticulo> </myns:Pedido> </myns:Pedidos>
Procesar XMLXMLDOM • Representación en memoria de un documento <?xml version=“1.0” encoding=“utf-8”?> <Pedidos> <!-– Ejemplo de comentario --> <Pedido descuento=“no”> <idarticulo>12345</idarticulo> <nombre>Lápiz</nombre> </Pedido> </Pedidos> root Pedidos comentario Pedido descuento idarticulo nombre
Procesar XMLXMLDOM (II) • Implementado en la clase XmlDocument • Ventajas • Óptimo para lecturas repetidas • Fácil de modificar • Inconvenientes • Parsing de todo el documento • Alto consumo de memoria • No está indexado XmlDocument doc = new XmlDocument(); doc.LoadXml(xml);
Procesar XMLAcceso secuencial • Ahorro de memoria • El documento se procesa mientras se lee • Óptimo cuando • Sólo accedemos a un elemento • Sólo procesamos cada elemento una vez • Estamos hidratando una clase
Procesar XMLAcceso secuencial (II) • Leer secuencialmente un documento • XmlTextReader XmlTextReader reader = new XmlTextReader(“MiDocumento.xml”); while(reader.Read()) { if(reader.LocalName == “idarticulo”) { Console.WriteLine(reader.ReadString()); } }
Procesar XMLAcceso secuencial (III) • Escribir secuencialmente un documento • XmlTextWriter • Conectable a cualquier XML en memoria • Vuelca su contenido • Permite personalización de formato StringWriter stringWriter = new StringWriter(); XmlTextWriter writer = new XmlTextWriter(stringWriter); writer.WriteStartElement("Pedidos"); writer.WriteComment("Comentario"); writer.WriteEndElement();
Procesar XMLXPath • Lenguaje para realizar consultas sobre XML • Basado en las rutas de archivo • Muy sencillo Operador Descripción Ejemplo / Hijo Hijo Empleado / Nombre / // Descendientes recursivos Empleados // Nombre . Contexto actual . // Nombre .. Padre .. / Nombre @ Atributo Empleado / @ID * Comodín Empleado / *
Procesar XMLXPath (II) • XmlDocument admite sentencias XPath • Búsquedas lentas • Elementos no indexados • Versión optimizada con XPathDocument XmlNode node = xmlDocument.SelectSingleNode("Pedidos/Pedido/nombre");
Procesar XMLEsquemas XSD • Definen la estructura de un documento • Formato: XML • Basándose en tipos: • Estándar: xs:string, xs:long • Simples: Especializaciones de los estándar • Complejos: Estructuras de datos
Procesar XMLEsquemas XSD (II) <?xml version="1.0"?> <xs:schema targetNamespace="http://tempuri.org/messagein" xmlns="http://tempuri.org/messagein" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" > <xs:element name="Pedido"> <xs:complexType> <xs:sequence> <xs:element name="idarticulo" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="nombre" type="xs:string" minOccurs="1" maxOccurs="1"/> </xs:sequence> <xs:attribute name="descuento" type="xs:string" /> </xs:complexType> </xs:element> </xs:schema> <?xml version="1.0"?> <Pedido descuento="no" xmlns="http://tempuri.org/messagein"> <idarticulo>12345</idarticulo> <nombre>Bolsa</nombre> </Pedido>
Procesar XMLSerialización XML • Las clases .NET son serializables en XML • Código autogenerado y compilado • El XML puede ser moldeado con atributos en la clase • XmlAttribute, XmlIgnore, XmlArray… • Herramienta xsd.exe • Genera el código de una clase a partir de un XSD • Genera un XSD a partir de una clase
XmlSerializer Procesar XMLSerialización XML (II) Clases .NET XSD.EXE XSD.EXE XML XSD
demo Serialización XML
Protocolo de comunicaciones 1 Formato de mensaje 2 Lenguaje de descripción 3 Mecanismo de Discovery 4 Arquitecturas distribuidasAntes 3 IDL Máquina A Máquina B 2 petición NDR IDLproxy IDLstub respuesta RPC (TCP) Registro Registro 1 4 Inspección máquina B
Arquitecturas distribuidasAntes (II) • Múltiples tecnologías para hacer lo mismo • No interoperables entre sí • Ligados a una plataforma DCOM CORBA Java RMI RPC Protocol RPC IIOP IIOP or JRMP Message Format NDR CDR Java Ser. Format Description IDL OMG IDL Java Discovery Windows Registry Naming Service RMI Registry or JNDI
Arquitecturas distribuidasAhora • Los usuarios no quieren cerrarse a una plataforma • Es necesaria una arquitectura independiente… • De la plataforma • Del lenguaje • De los objetos • De los mecanismos de llamada • Bienvenido a SOA… • Service Oriented Arquitecture
Arquitecturas distribuidasSOA • SOA ve el mundo de una forma distinta • Servicios autónomos • Fronteras explícitas • Plataformas dispares • Integración basada en XML • Se comparte el esquema, no la clase
Arquitecturas distribuidasServicios Web • Los servicios web son la clave de SOA • Redefinición de las tecnologías distribuidas basada en XML • Comunicación vía protocolos de Internet • HTTP, SMTP, FTP… • SOAP como formato de mensaje • WSDL como definición de servicios • UDDI como localizador
Servicios WebProtocolos Servicios publicados Servicio 1 Publicación mediante UDDI Servicio 1 Descubrimiento mediante UDDI Servicio Servicio Web Aplicación Cliente Registro UDDI Descripción mediante WSDL XML Schema WSDL Invocación/Acceso mediante SOAP Transporte mediante HTTP / SMTP / WAP Mensaje SOAP
Servicios WebEjemplo SOAP POST /webservice3/service1.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://mycompany.com/webservices/Multiplicar" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> </soap:Header> <soap:Body> <Multiplicar xmlns="http://mycompany.com/webservices/"> <n1>2</n1> <n2>3</n2> </Multiplicar> </soap:Body> </soap:Envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MultiplicarResponse xmlns="http://mycompany.com/webservices/"> <MultiplicarResult>int</MultiplicarResult> </MultiplicarResponse> </soap:Body> </soap:Envelope>
Servicios WebEjemplo WSDL <types> <s:schema elementFormDefault="qualified" targetNamespace="http://mycompany.com/webservices/"> <s:element name="Multiplicar"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="n1" type="s:int" /> <s:element minOccurs="1" maxOccurs="1" name="n2" type="s:int" /> </s:sequence> </s:complexType> </s:element> <s:element name="MultiplicarResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="MultiplicarResult" type="s:int" /> </s:sequence> </s:complexType> </s:element> <s:element name="int" type="s:int" /> </s:schema> </types> <?xml version="1.0" encoding="utf-8"?> <definitions> <types> </types> <message> </message> <portType> </portType <binding> </binding> <service> </service> </definitions> <message name="MultiplicarSoapIn"> <part name="parameters" element="s0:Multiplicar" /> </message> <message name="MultiplicarSoapOut"> <part name="parameters" element="s0:MultiplicarResponse" /> </message> <binding name="Service1Soap" type="s0:Service1Soap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http“ style="document" /> <operation name="Multiplicar"> <soap:operation soapAction="http://mycompany.com/webservices/Multiplicar“ style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <portType name="Service1Soap"> <operation name="Multiplicar"> <input message="s0:MultiplicarSoapIn" /> <output message="s0:MultiplicarSoapOut" /> </operation> </portType> <service name="Service1"> <port name="Service1Soap" binding="s0:Service1Soap"> <soap:address location="http://server/webservice/service1.asmx" /> </port> </service>
Desarrollo de Servicios Web con .NET
Biz Tier Logic HTML OS Services XML XML Arquitectura .NETGeneración de aplicaciones .NET Otros servicios Otros servicios XML Servicios Web Formularios Web XML Browsers estándar Lógica aplicación Clientes inteligentes Servicios SO Servicios building blocks XML Dispositivos móviles
Implementación .NETExposición de servicios web • ASP.NET permite exponer clases .NET como servicios web • Atributos [WebService], [WebMethod] • Traduce peticiones SOAP • Genera automáticamente WSDL • Acceso a toda la funcionalidad ASP.NET • Sesión • Seguridad • Extensiones • …
Implementación .NETConsumo de servicios web • Herramienta WSDL.exe • Genera un proxy a partir de un WSDL • Llamada por “add reference” en VS.NET • Clase derivada de SoapHttpClientProtocol • Con métodos semejantes al Web Service • Métodos comunes • Autentificación • Proxies • Llamadas asíncronas
demo Servicios Web con .NET
Implementación .NETTipos complejos • .NET utiliza la serialización XML • Recepción de peticiones SOAP • Envío de respuestas SOAP • .NET utiliza la herramienta xsd • Generación del WSDL • Generación del proxy
demo Tipos complejos
Servicios Web avanzados WSE 2.0
WS-I¿Es suficiente? • El estándar básico (SOAP, WSDL, UDDI) sólo cubre una comunicación simple • Llamadas a servicios • Definición de interfaces • Inspección de funcionalidad • Las aplicaciones distribuidas necesitan más • Seguridad • Mensajería fiable • Transacciones • …
Especificaciones WS-*El futuro • Stack completo basado en servicios web • En desarrollo por los principales fabricantes de software Aplicaciones conectadas Procesos de negocio Administración … Transacciones Seguridad Fiabilidad Metadatos Mensajería XML HTTP TCP SMTP …
Mensajería WS-Addressing WS-Eventing MTOM (Attachments) Fiabilidad WS-ReliableMessaging Seguridad WS-Security WS-Trust WS-SecureConversation WS-Federation Transacciones WS-Coordination WS-AtomicTransaction WS-BusinessActivity Metadatos WS-Policy WS-PolicyAssertions WS-PolicyAttachment WS-SecurityPolicy WS-Discovery WS-MetadataExchange Especificaciones WS-*Estándares Todas las especificaciones en http://msdn.microsoft.com/webservices/understanding/specs/default.aspx
Web Services Enhancements¿Qué es? • Extensión de los Servicios Web de .NET • Implementa varias especificaciones WS-* • Plenamente soportado • Pero implementa especificaciones en borrador • Integrado con Visual Studio Descargable en http://msdn.microsoft.com/webservices/building/wse/default.aspx
Mensajería WS-Addressing WS-Eventing MTOM (Attachments) Fiabilidad WS-ReliableMessaging Seguridad WS-Security WS-Trust WS-SecureConversation WS-Federation Transacciones WS-Coordination WS-AtomicTransaction WS-BusinessActivity Metadatos WS-Policy WS-PolicyAssertions WS-PolicyAttachment WS-SecurityPolicy WS-Discovery WS-MetadataExchange Web Services EnhancementsEstándares soportados
Web Services EnhancementsDesarrollo • En cliente • Visual Studio crea dos proxies en cada referencia • <ServiceName> • <ServiceName>WSE • En servidor • Mismo código • Configuración en web.config • Funcionalidad adicional disponibleen SoapContext
Disponible seleccionando Visual Studio Tools en la instalación Configuración accesible en Proyecto / WSE Settings 2.0 Web Services EnhancementsIntegración con Visual Studio
Web Services EnhancementsCaracterísticas principales • WS-Security • Autenticación (Usuario/Password, X509, Kerberos) • Integridad (firma digital) • Privacidad (cifrado) • WS-Trust y WS-SecureConversation • Establecimiento de diálogos seguros • WS-Policy • Fichero de configuración que especifica requisitos para los mensajes
Web Services EnhancementsCaracterísticas principales (II) • WS-Addressing • Routing de mensajes • Especificados con WS-Referral • Permite routing según contenido • WS-Attachments • Envío de ficheros binarios
demo WSE
Más información • Danysoft • Información, artículos técnicos, www.danysoft.com • Servicios Profesionales, sp@danysoft.com • Software, utilidades, licencias y libros: www.danyshop.com, info@danysoft.com
Gracias por su asistencia • Para cualquier consulta, no dude en contactar con Danysoft: • Servicios Profesionales: 902 343484 | sp@danysoft.com • Software, utilidades y licencias: 902 123146 | info@danysoft.com • www.danysoft.com