You are on page 1of 29

ALVARADO HERNANDEZ MATILDE DE ASIS NL. 4 GRAJALES VAZQUEZ FRANCISCO XAVIER NL.17 LPEZ DAZ YADIRA JACQUELINE NL.

21 LPEZ VAZQUEZ TERESA DE JESUS NL.24 VELAZQUEZ AREVALO ANA SILVIA NL.31

09510573 09510615 09510627 09510637 09510588

5.1 Visin general de servicios Web XML. Los servicios Web XML son un conjunto de aplicaciones o de tecnologas con capacidad para interoperar en la Web. Estas aplicaciones o tecnologas intercambian datos entre s con el objetivo de ofrecer unos servicios. Los proveedores ofrecen sus servicios como procedimientos remotos y los usuarios solicitan un servicio llamando a estos procedimientos a travs de la Web, por lo que estos servicios deben estar alojados en un servidor Web. Los servicios Web XML permiten el manejo distribuido de componentes, estos permiten tomar ventaja de la infraestructura de Internet para la distribucin de funcionalidad y paquetes de datos. Las principales caractersticas de los servicios Web XML son: Estn basados en protocolos estndar para la Web. Los servicios Web XML realizan las peticiones y proporcionan las respuestas utilizando protocolos estndar de la Web, como los son HTTP (Hyper Text Transfer Protocol), XML (Extensible Markup Language), y SOAP (Simple Object Access Protocol), toda plataforma que maneje dichos protocolos, podr aprovechar la funcionalidad de los servicios Web XML. Comunicacin de aplicacin a aplicacin basada en Internet. Al utilizar un servicio Web XML no se tienen una interfaz de usuario visible; realmente se trata de un componente que puede ser consumido de manera programtica de aplicacin a aplicacin. Los servicios Web XML proporcionan una interfaz estndar para la recepcin de peticiones y envo de respuesta, denominada contrato, dicho contrato pone a disposicin de los usuarios la informacin requerida por el componente, describe los comportamientos del mismo, y relaciona los datos de entrada con la salida del componente. Independencia del lenguaje. Los servicios Web XML pueden ser consumidos desde programas escritos en cualquier lenguaje .NET, por lo cual no es necesario aprender un lenguaje determinado para poder tener acceso a su funcionalidad. Independencia de la plataforma. Independientemente de la plataforma que dispongan los clientes de una aplicacin, el contrato se encarga de hacer la peticin en un formato estndar, y de recibir la respuesta correspondiente. Arquitectura libre del manejo de estados (stateless architecture). Los servicios Web XML no manejan estados de objetos; cada respuesta brindada por un

servicio Web XML es una nueva instancia de un objeto, con su estado particular. Lo que una peticin realiza no impacta lo realizado por otras peticiones. Comunicacin sncrona y asncrona. El requerimiento de ejecucin de un mtodo de servicio Web XML, y el requerimiento de la respuesta, son independientes. La aplicacin que consume el servicio Web XML, y el servicio Web XML mismo, pueden operar con mayor disponibilidad, ya que liberan recursos mientras se est en tiempo de espera. Las aplicaciones intercambian datos entre s en un medio ambiente seguro usando XML signature y XML encryption, XML signature ofrece servicios de integridad y autenticacin de mensajes para los datos, XML encryption es el proceso para codificar datos de tal manera que usuarios no autenticados no puedan entenderlos. Los principales usos que tienen los servicios Web XML son los siguientes: Cuando se requiere compartir funcionalidad libre de interfaz de usuario. Los servicios Web son tiles en cuando se desea consumir la funcionalidad de un componente, sin la intermediacin de una interfaz de usuario. Ejemplos de esto es el consumo de servicios que proporcionan informacin, como tipos de cambio, estado del clima, precios de productos, disponibilidad de lugares en eventos, sin tener que responder a alguna interfaz de usuario. Cuando se quiere comercializar un servicio de uso de software, y no un producto de software. En el futuro, no se vender software, sino la funcionalidad que el software brinda estar disponible como servicio en la Web. Cuando el equipo cliente y servidor requieren compartir funcionalidad en Internet, pero difieren en su plataforma operativa. 5.2 Tecnologas subyacentes. Las especificaciones que se han desarrollado para implementar los servicios Web se presentan como una pila de tecnologas donde las especificaciones superiores hacen uso de las inferiores, como se muestra en la figura.

5.2.1 SOAP (Simple Object Access Protocol). Para ser capaces de comunicarse entre s, un servicio Web y una aplicacin cliente deben concordar sobre un protocolo comn. SOAP es un protocolo estndar de comunicacin para intercambiar informacin en un formato estructurado en un medio ambiente distribuido. La informacin intercambiada entre la aplicacin cliente y el servicio Web es llamado mensaje. Los mensajes incluyen las llamadas hechas por una aplicacin cliente a un mtodo Web y los datos retornados por el mtodo Web al cliente. Cuando una aplicacin cliente hace una solicitud a un mtodo Web, un paquete SOAP es creado. Este paquete contiene el nombre del mtodo Web invocado y los parmetros pasados al mtodo Web en un formato XML. Esta informacin es usada para invocar el mtodo Web con los parmetros apropiados. Cuando el paquete SOAP llega al servidor Web en el cual reside el servicio Web, el nombre del mtodo Web y sus parmetros son extrados del paquete SOAP y el mtodo Web apropiado es invocado. SOAP especifica lo siguiente: Un formato de mensaje para una comunicacin unidireccional, describiendo cmo se empaqueta la informacin en documentos XML. Un conjunto de convenciones para usar mensajes SOAP para implementar el patrn de interaccin RPC (Remote Procedure Call), definiendo cmo los clientes pueden invocar un Procedimiento Remoto enviando un mensaje SOAP y cmo los servicios pueden responder enviando otro mensaje al llamador. Un conjunto de reglas que una entidad que procesa mensajes SOAP debe seguir, definiendo en particular los elementos XML que una entidad debe leer y entender, as como las acciones que deben tomar si no entienden el contenido, estas reglas son llamadas: Reglas de Codificacin de los Datos. Una descripcin de cmo se debe transportar un mensaje SOAP sobre HTTP y SMTP. Cada mensaje contiene los siguientes elementos: Elemento envelope, este es el elemento raz de un documento SOAP, este elemento contiene los elementos header y body del mensaje SOAP, este elemento es obligatorio. Elemento header, este elemento es opcional y da al servidor informacin extra, como autenticacin y manejo de transacciones. Elemento body, este elemento es obligatorio que contiene datos concretos del mensaje SOAP, este elemento contiene informacin tal como nombre del mtodo, parmetros, y los valores en la invocacin del mtodo. Elemento fault, este elemento es utilizado para determinar si existe algn error en el mensaje SOAP y no desplegar mensajes de error.

La cabecera y el cuerpo pueden tener mltiples subpartes en forma de bloques de la cabecera y bloques del cuerpo. Cuando una aplicacin cliente hace una solicitud a un mtodo Web, un paquete SOAP es creado. Este paquete contiene el nombre del mtodo Web que es invocado, y los parmetros que son pasados al mtodo Web en un formato XML. Cuando el paquete SOAP llega al servidor Web en el cual reside el servicio Web, el mtodo Web y sus parmetros son extrados del paquete SOAP y el mtodo es invocado. Este son unos ejemplos de una solicitud SOAP. En esta liga se puede revisar un servicio Web que proporciona informacin del clima http://www.webservicex.net/globalweather.asmx?op=GetWeather Esta es la solicitud del servicio de clima: <?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> <GetWeather xmlns="http://www.webserviceX.NET"> <CityName>string</CityName> <CountryName>string</CountryName> </GetWeather> </soap:Body> </soap:Envelope> Esta es la respuesta del servicio de clima: <?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> <GetWeatherResponse xmlns="http://www.webserviceX.NET"> <GetWeatherResult>string</GetWeatherResult> </GetWeatherResponse> </soap:Body> </soap:Envelope> 5.2.2 WSDL (Web Services Description Language). El Lenguaje de Descripcin. WSDL es un lenguaje estndar basado en XML, que define como los servicios Web XML son descritos cuando son publicados en un registro. La informacin del servicio Web XML es publicada en registros como documentos WSDL. El documento WSDL es un archivo XML que incluye el esquema de interfaz del

servicio Web XML. WSDL reconoce los mtodos que son intercambiados entre el proveedor del servicio Web XML y el consumidor del servicio Web XML. Un documento WSDL proporciona informacin a los clientes de cmo acceder a los servicios Web XML. WSDL proporciona la informacin usando varios elementos. Estos elementos de un archivo WSDL incluyen lo siguiente: Types. Define los tipos de datos utilizados para el intercambio de mensajes entre el consumidor y el servicio. Message. Describe los mensajes que sern comunicados entre el consumidor y el servicio. portType. Identifica el conjunto de operaciones que realiza el servicio, y los mensajes involucrados en dichas operaciones. Binding. Especfica los detalles de protocolo para el intercambio de mensajes entre las operaciones, describiendo cmo traducir contenido abstracto a un formato estndar. Service. Agrupa aquellos puertos que estn relacionados, y que implementan un servicio Web. Para poder ver un documento WSDL utilizamos el mismo servicio de clima utilizado anteriormente y lo invocamos agregndole ?WSDL al final del URL http://www.webservicex.net/globalweather.asmx?WSDL El documento WSDL obtenido es el siguiente: <?xml version="1.0" encoding="utf-8" ?> <wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.webserviceX.NET" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.webserviceX.NET" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET"> <s:element name="GetWeather"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="CityName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetWeatherResponse"> <s:complexType> <s:sequence>

<s:element minOccurs="0" maxOccurs="1" name="GetWeatherResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetCitiesByCountry"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetCitiesByCountryResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="GetCitiesByCountryResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="string" nillable="true" type="s:string" /> </s:schema> </wsdl:types> <wsdl:message name="GetWeatherSoapIn"> <wsdl:part name="parameters" element="tns:GetWeather" /> </wsdl:message> <wsdl:message name="GetWeatherSoapOut"> <wsdl:part name="parameters" element="tns:GetWeatherResponse" /> </wsdl:message> <wsdl:message name="GetCitiesByCountrySoapIn"> <wsdl:part name="parameters" element="tns:GetCitiesByCountry" /> </wsdl:message> <wsdl:message name="GetCitiesByCountrySoapOut"> <wsdl:part name="parameters" element="tns:GetCitiesByCountryResponse" /> </wsdl:message> <wsdl:message name="GetWeatherHttpGetIn"> <wsdl:part name="CityName" type="s:string" /> <wsdl:part name="CountryName" type="s:string" /> </wsdl:message> <wsdl:message name="GetWeatherHttpGetOut"> <wsdl:part name="Body" element="tns:string" /> </wsdl:message> <wsdl:message name="GetCitiesByCountryHttpGetIn"> <wsdl:part name="CountryName" type="s:string" /> </wsdl:message> <wsdl:message name="GetCitiesByCountryHttpGetOut">

<wsdl:part name="Body" element="tns:string" /> </wsdl:message> <wsdl:message name="GetWeatherHttpPostIn"> <wsdl:part name="CityName" type="s:string" /> <wsdl:part name="CountryName" type="s:string" /> </wsdl:message> <wsdl:message name="GetWeatherHttpPostOut"> <wsdl:part name="Body" element="tns:string" /> </wsdl:message> <wsdl:message name="GetCitiesByCountryHttpPostIn"> <wsdl:part name="CountryName" type="s:string" /> </wsdl:message> <wsdl:message name="GetCitiesByCountryHttpPostOut"> <wsdl:part name="Body" element="tns:string" /> </wsdl:message> <wsdl:portType name="GlobalWeatherSoap"> <wsdl:operation name="GetWeather"> <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get weather report for all major cities around the world.</documentation> <wsdl:input message="tns:GetWeatherSoapIn" /> <wsdl:output message="tns:GetWeatherSoapOut" /> </wsdl:operation> <wsdl:operation name="GetCitiesByCountry"> <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get all major cities by country name(full / part).</documentation> <wsdl:input message="tns:GetCitiesByCountrySoapIn" /> <wsdl:output message="tns:GetCitiesByCountrySoapOut" /> </wsdl:operation> </wsdl:portType> <wsdl:portType name="GlobalWeatherHttpGet"> <wsdl:operation name="GetWeather"> <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get weather report for all major cities around the world.</documentation> <wsdl:input message="tns:GetWeatherHttpGetIn" /> <wsdl:output message="tns:GetWeatherHttpGetOut" /> </wsdl:operation> <wsdl:operation name="GetCitiesByCountry"> <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get all major cities by country name(full / part).</documentation> <wsdl:input message="tns:GetCitiesByCountryHttpGetIn" /> <wsdl:output message="tns:GetCitiesByCountryHttpGetOut" /> </wsdl:operation> </wsdl:portType> <wsdl:portType name="GlobalWeatherHttpPost"> <wsdl:operation name="GetWeather"> <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get weather report for all major cities around the world.</documentation>

<wsdl:input message="tns:GetWeatherHttpPostIn" /> <wsdl:output message="tns:GetWeatherHttpPostOut" /> </wsdl:operation> <wsdl:operation name="GetCitiesByCountry"> <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get all major cities by country name(full / part).</documentation> <wsdl:input message="tns:GetCitiesByCountryHttpPostIn" /> <wsdl:output message="tns:GetCitiesByCountryHttpPostOut" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="GlobalWeatherSoap" type="tns:GlobalWeatherSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <wsdl:operation name="GetWeather"> <soap:operation soapAction="http://www.webserviceX.NET/GetWeather" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="GetCitiesByCountry"> <soap:operation soapAction="http://www.webserviceX.NET/GetCitiesByCountry" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="GlobalWeatherHttpGet" type="tns:GlobalWeatherHttpGet"> <http:binding verb="GET" /> <wsdl:operation name="GetWeather"> <http:operation location="/GetWeather" /> <wsdl:input> <http:urlEncoded /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation>

<wsdl:operation name="GetCitiesByCountry"> <http:operation location="/GetCitiesByCountry" /> <wsdl:input> <http:urlEncoded /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="GlobalWeatherHttpPost" type="tns:GlobalWeatherHttpPost"> <http:binding verb="POST" /> <wsdl:operation name="GetWeather"> <http:operation location="/GetWeather" /> <wsdl:input> <mime:content type="application/x-www-form-urlencoded" /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="GetCitiesByCountry"> <http:operation location="/GetCitiesByCountry" /> <wsdl:input> <mime:content type="application/x-www-form-urlencoded" /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="GlobalWeather"> <wsdl:port name="GlobalWeatherSoap" binding="tns:GlobalWeatherSoap"> <soap:address location="http://www.webservicex.net/globalweather.asmx" /> </wsdl:port> <wsdl:port name="GlobalWeatherHttpGet" binding="tns:GlobalWeatherHttpGet"> <http:address location="http://www.webservicex.net/globalweather.asmx" /> </wsdl:port> <wsdl:port name="GlobalWeatherHttpPost" binding="tns:GlobalWeatherHttpPost"> <http:address location="http://www.webservicex.net/globalweather.asmx" /> </wsdl:port> </wsdl:service> </wsdl:definitions>

Este documento muestra los elementos de un documento WSDL, especificando los tipos, mensajes, operaciones y enlaces que ofrece este servicio Web. 5.2.3 UDDI (Universal Description, Discovery, and Integration). El Repositorio de Servicios. Uno de los puntos ms importantes de un servicio es su publicidad, pensando en ello, se ha definido un mecanismo para darles publicidad a los servicios Web XML que las empresas desarrollan, denominado UDDI. Cuando un proveedor de servicios Web quiere poner un servicio Web disponible para clientes de aplicacin, el proveedor describe el servicio Web usando un documento WSDL. Entonces el proveedor registra el servicio Web en el directorio UDDI. El directorio UDDI contiene apuntadores a el servicio Web y el documento WSDL de el servicio Web. De esta manera las aplicaciones Cliente pueden descubrir el servicio Web usando el directorio UDDI. La especificacin UDDI tiene dos objetivos esenciales: (1) ser un soporte a los desarrolladores para encontrar informacin sobre servicios web y poder construir clientes, (2) facilitar el Enlace Dinmico de Servicios Web, permitiendo consultar referencias y acceder a servicios de inters. La informacin en un registro UDDI se almacena en archivos XML con una estructura jerrquica, Los elementos de esta estructura son: BusinessEntity: Describe la organizacin que ofrece el servicio (Nombre, direccin, etc.) businessService: Grupo de servicios Web relacionados ofrecido por una BusinessEntity (empresa), pero ofrecida en diferentes direcciones, versiones, y tecnologas. Al igual que las BusinessEntity, pueden incluir informacin de clasificacin. BindingTemplate: Informacin tcnica para utilizar el servicio, (Direccin del servicio, Referencias documentos (tModels) describiendo la interfaz u otras propiedades, Como dar valor a los parmetros y valores por defecto). tModel: (Technology Model). Estructura de Metadatos Genrica para representar cualquier concepto o construccin (definiciones de protocolos, ficheros WSDL, XML schemas, Espacios de Nombres, esquemas de categoras, etc.). La figura 5.2 muestra un ejemplo de cmo estn estructurados los datos en un registro UDDI.

Figura 5.2 La figura 5.3 muestra la relacin entre las tecnologas usadas para implementar un servicio Web. La aplicacin Cliente localiza un servicio Web XML mediante un Registro UDDI que contiene apuntadores a los documentos WSDL y servicios Web XML, una vez localizado el servicio Web XML la aplicacin Cliente se comunica con el servicio Web mediante mensajes SOAP. Comunicacin mediante Mensajes SOAP

Figura 5.3

5.3 Publicacin de un servicio WEB. Los servicios Web XML desde el punto de vista de programacin, son muy parecidos a un programa, mientras que en su consumo son ms orientados al ambiente Web. Estos servicios estn constituidos por un archivo de extensin .asmx, y este archivo debe contener lo siguiente: 1. La directiva @WebService. Esta directiva especfica los atributos de servicio Web XML. Esta directiva es el equivalente a @Page de las pginas Web. Los atributos que utiliza esta directiva son: Class. Especfica la clase implementada por el servicio Web XML, esta se compila automticamente la primera vez que se tiene acceso al servicio Web XML, o despus de que se operan cambios en l. CodeBehind. Especfica el archivo de cdigo fuente que contiene la clase utilizada por el servicio Web XML. Language. Especfica el lenguaje .NET utilizado para codificar la clase que implementa el servicio Web XML. La sintaxis de cmo utilizar la directiva @WebService y sus atributos es la siguiente: <%@ WebService Language="C#" CodeBehind="NombreArchivo" Class="NombreClase" %> La directive @WebService se deber colocar al principio del cdigo del servicio Web XML. 2. Importar el espacio de nombres System.Web.Services. El espacio de nombres System.Web.Services es el espacio de nombres que contiene las clases que permiten crear servicios Web XML, tales como WebService y WebMethodAttribute. La sintaxis para importar el espacio de nombres es la siguiente. using System.Web.Services; Despus de importar el espacio de nombres, se puede escribir el cdigo de la clase que constituir el servicio Web; esta clase deber heredar la funcionalidad de System.Web.Services.WebService. 3. Crear una clase, ya sea dentro de la pgina o en modo Code Behind. Despus de establecer las directivas y haber importado los espacios de nombres, se deber codificar una clase, que contendr el bloque de cdigo que constituye el servicio Web XML. Debe ser una clase porque al consumir un servicio Web XML programticamente, es necesario manejar la funcionalidad en modo objeto y stos no son otra cosa que instancias de una clase. La clase debe tener suficientes permisos, de preferencia ser pblica, sobre todo si el servicio Web XML podr ser consumido desde Internet. La sintaxis que se utiliza para declarar una clase es la siguiente: public class NombreClase : System.Web.Services.WebService { WebMetodos

} 4. Declarar como [WebMethod()] las funciones del servicio Web XML. Las funciones incluidas en la clase constituyen el comportamiento del servicio Web XML, en su definicin, las funciones se asemejan mucho a las funciones que conocemos en programacin. Su diferencia radica en que deben ser de acceso pblico, y que deben estar habilitadas para ser acreditadas por clientes remotos a travs de la Web, agregndoles el atributo WebMethod(). La sintaxis para declarar un WebMethod es la siguiente: [WebMethod(Description="Descripcin del mtodo")] public TipoFuncion NombreFuncion(Parametros){ return ValorRetorno } Para crear un servicio Web con la herramienta Microsoft Visual Web Developer 2005, el primer paso es crear el servicio Web, en el men principal de esta herramienta seleccionamos la opcin Archivo y el men que aparece seleccionamos la opcin Nuevo sitio Web como se muestra en la figura 5.4.

Figura 5.4 Aparece una ventana donde vamos a crear el nuevo sitio Web que contendr el servicio Web, seleccionamos la plantilla correspondiente al Servicio Web ASP.NET y proporcionamos la ruta fsica donde va a estar almacenado este sitio y el lenguaje que se va a utilizar, en este caso el lenguaje que seleccionamos es C#, como se muestra en la figura 5.5

Figura 5.5 Una vez que creamos el sitio Web, agregamos un nuevo elemento como se muestra en la figura 5.6, que ser la clase que contenga la funcionalidad del servicio Web.

Figura 5.6 En seguida aparece una pantalla donde vamos a seleccionar la plantilla correspondiente al servicio Web, y proporcionamos el nombre del archivo que contenga el servicio Web con extensin asmx, como se muestra en la figura 5.7.

Figura 5.7

Modificamos el cdigo del archivo Aritmetica.cs para que quede de la siguiente manera: using System; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; /// <summary> /// Descripcin breve de Aritmetica /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Aritmetica : System.Web.Services.WebService { public Aritmetica () { } [WebMethod(Description="Suma dos nmeros enteros")] public int Suma(int N1, int N2) { return (N1 + N2); } [WebMethod(Description="Multiplicacion dos nmeros enteros")] public int Multiplicacion(int N1, int N2) { return (N1 * N2);

} [WebMethod(Description = "Division entre dos nmeros enteros")] public int Division(int N1, int N2) { return (N1 / N2); } } Generamos el sitio Web como se muestra en la figura 5.8.

Figura 5.8

Una vez que se ha desarrollado el servicio Web, el siguiente paso es desplegar el servicio Web en un servidor Web, como el IIS Internet Information Services, para que est disponible para usuarios o aplicaciones cliente, para esto seleccionamos la opcin Stio Web del men principal y del men que aparece seleccionamos la opcin Copiar sitio Web como en la figura 5.9.

Figura 5.9 Posteriormente se indica el sitio donde se va a desplegar el servicio Web, ya sea en el servidor local o en un servidor remoto, como en la figura 5.10.

Y por ltimo se seleccionan los archivos que se van a copiar en el servidor web, como en la figura 5.11.

Figura 5.11 Para probar que el servicio Web quedo desplegado en el servidor web abrimos el IIS (Internet Information Services) en esta herramienta el servicio Web se debe mostrar como una carpeta virtual Figura 5.12.

Figura 5.12

Para publicar el servicio Web en el registro UDDI y este pueda ser descubierto por algn cliente existen varias herramientas, una de ellas viene integrada en Windows Server 2003, para poder utilizar esta herramienta primero se deben instalar los servicios UDDI, esto lo podemos hacer en la opcin Agregar Componentes de Windows como se muestra en la figura 5.13.

Figura 5.13 Una vez instalados los servicios UDDI utilizamos la interface web de esta herramienta, en un navegador de internet tecleamos la direccin http://localhost/uddi figura 5.14.

Figura 5.14

Antes de publicar el servicio Web en el registro UDDI es necesario dar de alta el proveedor del servicio Web (businessEntity), esto en la ventana correspondiente, Figura 5.15, especificando la informacin necesaria de dicho proveedor.

Figura 5.15 Para agregar un nuevo servicio Web se utiliza la pestaa Services y en la ventana correspondiente Figura 5.16 se asigna el nombre y la descripcin del servicio, dentro de esta misma ventana en la pestaa Bindings se especifica la ubicacin del servicio Web, as como la descripcin de dicho servicio (bindingTemplate).

Figura 5.16

El paso final es proveer informacin tcnica, parmetros, etc del servicio Web (tModel), Figura 5.17.

Figura 5.17 Este model creado se asocia con el servicio Web Figura 5.18 y de esta manera el servicio Web es publicado.

Figura 5.18

5.4 Consumo de un servicio WEB. Los servicios Web XML pueden ser consumidos de dos maneras, directamente desde un navegador o desde una aplicacin de forma programtica. Las diferencias entre estas dos formas son las siguientes: Directamente desde el navegador. La peticin se realiza va HTTP al servidor, este mostrar la pgina de hipertexto de descripcin, que lista los mtodos disponibles en el servicio Web XML. En dicha pgina puede seleccionar algn mtodo disponible, interactuar con la interfaz proporcionando datos y recibir la respuesta del servicio Web XML. La respuesta que se recibe est en XML Desde una aplicacin, programticamente. Se debe establecer una referencia hacia el servicio Web XML, dicha referencia es un objeto que es utilizado para comunicarse con el servicio Web utilizando SOAP. La clase que se genera es una equivalencia de la clase original del servicio Web XML, con la diferencia de que no contiene la lgica de la aplicacin, en lugar de eso, la clase contiene la lgica de clasificacin y transporte de datos. La clase permite a la aplicacin que consume el servicio Web XML disponer de una respuesta manejada a travs de SOAP, que permite manejar objetos ms complejos que HTTP. Se deber en el programa generar una instancia de la clase, utilizar los mtodos del servicio Web XML y recibir los datos de la aplicacin. Cuando se realiza el consumo desde el navegador, todo el proceso ocurre ah mismo en el navegador. 1. Se debe hacer una solicitud del servicio Web XML utilizando HTTP. 2. Aparecer la pgina de descripcin, que expone todos los mtodos del servicio, figura 5.19. 3. Se selecciona un mtodo del servicio. 4. Se proporcionan los datos que el mtodo requiere, figura 5.20. 5. Se reciben los resultados del mtodo en formato XML.

Figura 5.19

El protocolo HTTP es textual, y es incapaz de manejar objetos complejos. Como este tipo de consumo del servicio Web XML se realiza utilizando el protocolo HTTP, la respuesta slo puede ofrecerse mediante XML, por lo que el resultado de esta llamada queda de la siguiente manera: <?xml version="1.0" encoding="utf-8" ?> <int xmlns="http://tempuri.org/">1</int> Para poder probar este servicio Web programatica se agrega una pgina a un proyecto web desarrollado en Microsoft Visual Web Developer 2005 y se le llama ConsumeWS, a esta pgina se le agrega tres controles de tipo Label llamados ResultadoSuma, ResultadoMultiplicacion, ResultadoDivision, el cdigo html quedara de la siguiente manera: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConsumeWS.aspx.cs" Inherits="ConsumeWS" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Pgina sin ttulo</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="ResultadoSuma" runat="server" /> <asp:Label ID="ResultadoMultiplicacion" runat="server" /> <asp:Label ID="ResultadoDivision" runat="server" /> </div> </form> </body> </html>

Al Proyecto se le agrega una referencia web, Figura 5.21 que es el servicio Web creado anteriormente, al cual se le denomina Aritmetica, esta referencia se importa dentro de la pgina y en el evento Load de la pgina se crea una instancia de la clase Aritmetica y se ejecuta el mtodo Suma del servicio Web, el resultado se muestra en la etiqueta llamada ResultadoSuma, el mtodo Multiplicacin se muestra en la etiqueta ResultadoMultiplicacion y el mtodo Division se muestra en la etiqueta ResultadoDivision.

Figura 5.21 El cdigo subyacente quedara de la siguiente manera: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Aritmetica; public partial class ConsumeWS : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Aritmetica.Aritmetica Consumidor = new Aritmetica.Aritmetica(); ResultadoSuma.Text = Consumidor.Suma(20, 30).ToString();

ResultadoMultiplicacion.Text = Consumidor.Multiplicacion(2,3).ToString(); ResultadoDivision.Text = Consumidor.Division(20, 2).ToString(); } } El resultado obtenido es el siguiente: Otra manera de utilizar un servicio Web de manera programtica es mediante una clase proxy, el procedimiento general es el siguiente: 1. Se debe tener desarrollado un servicio Web XML(.asmx). 2. Se debe descubrir el servicio Web mediante la herramienta disco.exe 3. Se debe crear una clase para el servicio Web XML mediante la herramienta wsdl.exe. 4. Se debe compilar la clase como librera. 5. En el proyecto donde se va a consumir el servicio Web se debe agregar una referencia a la librera creada. 6. En el cdigo del programa que consume el servicio Web XML deber crearse una instancia de la clase. 7. Se deber invocar el mtodo del servicio Web XML a travs de la instancia de la clase que se ha instanciado. 8. Se utiliza el resultado retornado por el servicio. Una vez que se tiene desarrollado el servicio Web el siguiente paso es descubrir dicho servicio, se conoce como descubrimiento de servicio Web al proceso por medio del cual se localiza un servicio Web y su descripcin, de tal manera que est disponible para los programas que consumen estos servicios, la herramienta que se utiliza para descubrir los servicios Web se llama disco.exe, su sintaxis es la siguiente. Disco.exe URL_Servicio Donde URL_Servicio es la direccin del servicio Web, una vez que se ejecute este programa se van a generar archivos de extensin .wsdl y .disco. Una vez que se ha descubierto el servicio Web, el siguiente paso es crear una clase que contenga cada mtodo del servicio Web, esta clase se va a generar con la herramienta wsdl.exe, su sintaxis es la siguiente: wsdl [options] {URL|path} Existen varias opciones que podemos usar al invocar la utilera wsdl.exe:

/baseurl: baseurl, esta opcin convierte la URL relativa dada en esta opcin en la URL dada en el documento WSDL /d:[domain], nombre de dominio. /l:[lenguaje], lenguaje que se va a utilizar para crear la clase proxy, por ejemplo CS para C# o VB para Visual Basic. /n:[espacio de nombres], menciona el espacio de nombres para el proxy creado. /o:[archivo de salida], menciona el nombre del archivo en el cual se va a guardar el cdigo del proxy generado. /protocol: protocolo, menciona el protocolo que se va a implementar, estos pueden ser SOAP, Httpget o HttpPost. /proxy: URL, menciona el URL del servidor proxy para utilizar solicitudes HTTP. La ejecucin de wsdl.exe producir un programa generado en el lenguaje especificado, que deber ser compilado como librera para su uso programtico. Dicho programa contendr la misma funcionalidad del servicio Web XML, con todas las especificaciones descriptivas, para compilar este programa se va a utilizar el compilador del lenguaje que se va a utilizar (visual basic, c sharp). Para crear la clase proxy del servicio Web generado anteriormente, realizamos los tres pasos antes mencionados: Descubrimos el servicio Web: disco.exe http://localhost/Aritmetica/Aritmetica.asmx Generamos la clase con la herramienta wsdl.exe: wsdl /l:cs /n:AritmeticaWS Aritmetica.wsdl. Generamos la librera del servicio Web con el compilador csc.exe csc /target:library /out:Aritmeticadll.dll Aritmetica.cs /r:System.dll /r:System.web.Services.dll /r:System.XML.dll Para poder probar la librera generada del servicio Web en forma programtica se agrega una pgina a un proyecto web desarrollado en Microsoft Visual Web Developer 2005 y se le llama ConsumeWSdll, a esta pgina se le agrega tres controles de tipo Label llamados ResultadoSuma, ResultadoMultiplicacion, ResultadoDivision, el cdigo html quedara de la siguiente manera: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConsumeWSdll.aspx.cs" Inherits="ConsumeWSdll" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Pgina sin ttulo</title> </head> <body> <form id="form1" runat="server"> Transitional//EN"

<div> <asp:Label ID="ResultadoSuma" runat="server" /> <asp:Label ID="ResultadoMultiplicacion" runat="server" /> <asp:Label ID="ResultadoDivision" runat="server" /> </div> </form> </body> </html> Agregamos una referencia al proyecto como se muestra en la figura 5.22.

Figura 5.22 Creamos una instancia de la clase generada y utilizamos sus mtodos, el cdigo subyacente quedara de la siguiente manera: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security;

using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class ConsumeWSdll : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { AritmeticaWS.Aritmetica Servicio = new AritmeticaWS.Aritmetica(); ResultadoSuma.Text = Servicio.Suma(5, 5).ToString(); ResultadoMultiplicacion.Text = Servicio.Multiplicacion(5,5).ToString(); ResultadoDivision.Text = Servicio.Division(25,5).ToString(); } } El resultado obtenido es el siguiente:

You might also like