Para construir nuestro proxy, vamos a utilizar una herramienta que viene con el sdk denominada svcutil que nos permite generar automáticamente el objeto proxy conociendo únicamente el objeto de descripción del servicio, es decir, el WSDL. Hay que tener en cuenta que el servicio debe estar activo y contar con permisos de escritura sobre el directorio donde se encuentra ubicado el ejecutable svcutil (c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\) . Vamos a crear un nuevo proyecto de librería de clases donde ubicaremos todos nuestros proxy y ejecutamos la siguiente linea de comandos en el cmd.
Después de ejecutar esta linea, se crearán 2 archivos. Uno de ellos es el fichero que contiene el objeto proxy y por defecto, se nombra igual que la implementación del contrato. En este caso, le cambiamos el nombre por ReservaVuelos.cs y el otro es un fichero de configuración que por defecto se le nombra output.config. En este caso, le cambiamos el nombre por app.config.
Buscamos estos dos archivos en la ruta donde se encuentra el svcutil.exe y los añadimos a nuestro proyecto de proxys. Recuerden que este proyecto debe tener una referencia a la libreria System.ServiceModel.
Nuestro objeto proxy es el siguiente.public partial class ReservaVuelosClient : System.ServiceModel.ClientBase<WebServices.Proxy.IReservaVuelos>, WebServices.Proxy.IReservaVuelos { public ReservaVuelosClient() { } public ReservaVuelosClient(string endpointConfigurationName) : base(endpointConfigurationName) { } public ReservaVuelosClient(string endpointConfigurationName, string remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public ReservaVuelosClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public ReservaVuelosClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : base(binding, remoteAddress) { } public string ObtenerCodigoAeropuerto(string ciudad, string pais) { return base.Channel.ObtenerCodigoAeropuerto(ciudad, pais); } }
Ahora en un proyecto de presentación aparte, que para este caso vamos a utilizar uno de consola, vamos a hacer uso de este objeto proxy el cual nos ayudará a consumir las operaciones expuestas por nuestro servicio.
using System; using System.ServiceModel; using WebServices.Proxy; namespace Presentacion.WebService.Console { class Program { static void Main(string[] args) { EndpointAddress objAddress = new EndpointAddress("http://localhost:8080/ServicioReservaVuelos"); BasicHttpBinding objBindig = new BasicHttpBinding(); ReservaVuelosClient objProxy = new ReservaVuelosClient(objBindig,objAddress); bool blnContinuar = true; string ciudad = string.Empty; string pais = string.Empty; string continuar = string.Empty; do { try { ciudad = string.Empty; pais = string.Empty; continuar = string.Empty; System.Console.WriteLine("Ciudad: \n"); ciudad = System.Console.ReadLine(); System.Console.WriteLine("\nPaís: \n"); pais = System.Console.ReadLine(); System.Console.WriteLine(objProxy.ObtenerCodigoAeropuerto(ciudad,pais)); System.Console.WriteLine("\nContinuar: \n 1. Sí\n 2. No"); continuar = System.Console.ReadLine(); if(continuar.Equals("2")) { blnContinuar = false; } } catch (Exception ex) { System.Console.WriteLine("Ha ocurrido un error al intentar conectarse con el servicio: \n" + ex.Message); blnContinuar = false; System.Console.ReadLine(); } } while (blnContinuar); } } }
Creamos un EndPointAddress para indicar la dirección y puerto de conexión, así como un BasicHttpBinding para fijar el protocolo de comunicación. Estos dos objetos se pasan por parámetro al proxy ReservaVuelosClient que nos lo creó svcutil anteriormente. Seguidamente solicitamos los parámetros de consulta ciudad y pais para solicitar el código de aeropuerto relacionado. Llamamos al método ObtenerCodigoAeropuerto con los parametros necesarios y mostramos el resultado. El bloque try...catch es para controlar cualquier error que pueda ocurrir durante la comunicación.
Estos contenidos se publican bajo una licencia de Creative Commons
No hay comentarios:
Publicar un comentario