Professional Documents
Culture Documents
PROGRAMACION WEB
PROGRAMACION WEB
5 Servicios Web XML. 5.1 --------------------------------------- Visin general de servicios Web XML. 5.2 --------------------------------------- Tecnologas subyacentes. 5.2.1 ------------------------------------- SOAP 5.2.2 ------------------------------------- WSDL 5.2.3 ------------------------------------- UDDI 5.3 ---------------------------------------- Publicacin de un servicio WEB. 5.4 ---------------------------------------- Consumo de un servicio WEB.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
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.
Figura 5.1
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
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/XMLSchemainstance" 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/XMLSchemainstance" 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>
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
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>
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB <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" />
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB </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>
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB <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" />
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB </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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
La figura 5.2 muestra un ejemplo de cmo estn estructurados los datos en un registro UDDI.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 0
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.
Registro UDDI
Documento WSDL
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 1
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 2
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 3
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 4
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); }
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB [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.
1 5
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 6
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.
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 7
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 8
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
1 9
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
2 0
Figura 5.17 Este tmodel creado se asocia con el servicio Web Figura 5.18 y de esta manera el servicio Web es publicado.
Figura 5.18
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
2 1
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
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
2 2
Figura 5.20
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.
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
2 3
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:
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
2 4
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
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
2 5
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 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> 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:
ITESCO
UNIDAD 5
APG
PROGRAMACION WEB
2 6
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:
ITESCO
UNIDAD 5
APG