Servicios Web XML
Servicios Web XML
Servicios Web XML
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
intermediación de una interfaz de usuario. Ejemplos de esto es el consumo de servicios
que proporcionan información, 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
Cuando una aplicación cliente hace una solicitud a un método Web, un paquete SOAP es
creado. Este paquete contiene el nombre del método Web que es invocado, y los parámetros
que son pasados al método Web en un formato XML. Cuando el paquete SOAP llega al
servidor Web en el cual reside el servicio Web, el método Web y sus parámetros son extraídos
del paquete SOAP y el método es invocado.
En esta liga se puede revisar un servicio Web que proporciona información del clima
http://www.webservicex.net/globalweather.asmx?op=GetWeather
Para poder ver un documento WSDL utilizamos el mismo servicio de clima utilizado
anteriormente y lo invocamos agregándole ?WSDL al final del URL
http://www.webservicex.net/globalweather.asmx?WSDL
Este documento muestra los elementos de un documento WSDL, especificando los tipos,
mensajes, operaciones y enlaces que ofrece este servicio Web.
La figura 5.2 muestra un ejemplo de cómo están estructurados los datos en un registro UDDI.
Figura 5.2
La figura 5.3 muestra la relación entre las tecnologías usadas para implementar un servicio
Web. La aplicación 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 aplicación Cliente se comunica con el servicio Web mediante mensajes
SOAP.
Documento
Registro WSDL
UDDI
Localiza un
servicio Web
3. Crear una clase, ya sea dentro de la página o en modo Code Behind. Después de
establecer las directivas y haber importado los espacios de nombres, se deberá
codificar una clase, que contendrá el bloque de código que constituye el servicio Web
XML. Debe ser una clase porque al consumir un servicio Web XML
programáticamente, 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 pública, 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
definición, las funciones se asemejan mucho a las funciones que conocemos en
programación. Su diferencia radica en que deben ser de acceso público, y que deben
estar habilitadas para ser acreditadas por clientes remotos a través de la Web,
agregándoles el atributo WebMethod(). La sintaxis para declarar un WebMethod es la
siguiente:
[WebMethod(Description="Descripción del método")]
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
opción Archivo y el menú que aparece seleccionamos la opción 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
física 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
Modificamos el código 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>
/// Descripción breve de Aritmetica
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Aritmetica : System.Web.Services.WebService {
public Aritmetica () {
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 opción Stio Web del menú principal
y del menú que aparece seleccionamos la opción Copiar sitio Web como en la figura 5.9.
Figura 5.9
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 algún 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 opción 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 dirección 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 información necesaria de dicho proveedor.
Figura 5.15
Figura 5.16
El paso final es proveer información técnica, parámetros, etc del servicio Web (tModel), Figura
5.17.
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
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 página de descripción, que expone todos los métodos del servicio, figura
5.19.
3. Se selecciona un método del servicio.
4. Se proporcionan los datos que el método requiere, figura 5.20.
5. Se reciben los resultados del método en formato XML.
Figura 5.19
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 sólo
puede ofrecerse mediante XML, por lo que el resultado de esta llamada queda de la siguiente
manera:
Para poder probar este servicio Web programatica se agrega una página a un proyecto web
desarrollado en Microsoft Visual Web Developer 2005 y se le llama ConsumeWS, a esta página
se le agrega tres controles de tipo Label llamados “ResultadoSuma”, “ResultadoMultiplicacion”,
“ResultadoDivision”, el código html quedaría de la siguiente manera:
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 página
y en el evento Load de la página se crea una instancia de la clase Aritmetica y se ejecuta el
método Suma del servicio Web, el resultado se muestra en la etiqueta llamada
ResultadoSuma, el método Multiplicación se muestra en la etiqueta ResultadoMultiplicacion y el
método Division se muestra en la etiqueta ResultadoDivision.
Figura 5.21
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;
}
}
El resultado obtenido es el siguiente:
Otra manera de utilizar un servicio Web de manera programática 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 librería.
5. En el proyecto donde se va a consumir el servicio Web se debe agregar una referencia
a la librería creada.
6. En el código del programa que consume el servicio Web XML deberá crearse una
instancia de la clase.
7. Se deberá invocar el método del servicio Web XML a través 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 descripción, 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 dirección del servicio Web, una vez que se ejecute este programa
se van a generar archivos de extensión .wsdl y .disco.
Una vez que se ha descubierto el servicio Web, el siguiente paso es crear una clase que
contenga cada método del servicio Web, esta clase se va a generar con la herramienta
wsdl.exe, su sintaxis es la siguiente:
wsdl [options] {URL|path}
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.
Para poder probar la librería generada del servicio Web en forma programática se agrega una
página a un proyecto web desarrollado en Microsoft Visual Web Developer 2005 y se le llama
ConsumeWSdll, a esta página se le agrega tres controles de tipo Label llamados
“ResultadoSuma”, “ResultadoMultiplicacion”, “ResultadoDivision”, el código html quedaría de la
siguiente manera:
Creamos una instancia de la clase generada y utilizamos sus métodos, el código subyacente
quedaría 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;