Ejemplo 2 de Desarrollo de servicios Web
En este segundo ejemplo de Web Service, vamos a usar el Visual Studio .NET para crear un cliente de Windows para usar un servicio Web publicado en el localhost.
El servicio Web que vamos a usar será el conversor de grados Centígrados (Celsius) a Fahrenheit, el código de esta clase la veremos en una página aparte y la usaremos desde localhost (el servidor de Internet local) o bien desde la siguiente dirección Web:
http://www.elguille.info/Net/WebServices/CelsiusFahrenheit.asmx
(para que compruebes que funciona en casos reales y no solamente con ejemplos de prueba)Para crear el cliente de Windows, necesitaremos iniciar Visual Studio .NET y crear una nueva aplicación de Windows, el lenguaje que vamos a usar es C#, aunque si quieres ver el código en Visual Basic .NET lo puedes bajar desde la página http://www.elguille.info/NET/universidad/tour2003.asp (aquí también estará el proyecto completo de C#).
El aspecto del formulario de prueba tendrá el siguiente aspecto:
Figura 1, El formulario en tiempo de diseñoLos nombres de los controles serán los que asigna automáticamente el Visual Studio .NET y son los relacionados a continuación:
Nombre del Control Texto mostrado label1 º Centígrados textBox1 textBox1 button1 a º F label2 º Fahrenheit textBox2 textBox2 button2 a º C label3 label3 Ahora vamos a localizar el servicio Web que queremos usar con nuestra aplicación de escritorio.
Para localizar un servicio Web podemos hacerlo de dos formas, usando los directorios UDDI o bien escribiendo la dirección en la que está localizado ese servicio Web, usaremos esta segunda forma de localizar el servicio Web.Nota:
En los siguientes pasos se va a indicar una dirección de localhost, pero también podemos especificar la dirección del servicio Web indicada al principio de este documento.
En los casos en que sea diferente lo que tengamos que escribir dependiendo de que el servicio Web esté en localhost o en una dirección real de Internet, se indicará en notas como esta.Cuando estamos trabajando con Visual Studio .NET o cualquier otro entorno de desarrollo, cuando queremos usar las clases que están contenidas en una librería (DLL) tenemos que localizar dicha librería dinámica y crear una referencia, de forma que el entorno de desarrollo sepa qué clases contiene dicha librería para que podamos usarla en nuestro proyecto.
Cuando queramos usar un servicio Web también tenemos que crear una referencia (llamada referencia Web), al crear esta referencia el Visual Studio .NET sabrá cómo localizar dicho servicio Web además de que sabrá que interfaces se exportan en esa clase, es decir sabrá todo lo que tiene que saber sobre la clase contenida en el servicio Web.Ahora veamos los pasos que seguiremos para añadir una referencia Web:
1- En el Explorador de soluciones, pulsa con el botón secundario del ratón sobre el elemento indicado con References, del menú mostrado selecciona la opción Agregar referencia Web... (ver la figura 2)
Figura 2, Agregar referencia Web2- Se mostrará una ventana desde la cual podemos acceder a los directorios UDDI o bien podríamos escribir la dirección en la que se encuentra el servicio Web, en la figura 3 se muestra el diálogo antes de escribir ninguna dirección ni seleccionar los directorios UDDI:
Figura 3, Agregar referencia WebComo vemos, podemos consultar los directorios UDDI o bien podemos escribir la dirección en la que se encuentra el servicio Web.
3- En este caso vamos a escribir la dirección del servicio Web que se encuentra en el localhost, para ello habrá que escribir en la barra de direcciones: http://localhost/celsiusfahrenheit.asmx (si queremos probar el servicio Web en nuestro propio equipo) o bien la dirección de ese servicio Web que está en mi sitio: http://www.elguille.info/Net/WebServices/CelsiusFahrenheit.asmx, en ambos casos el código incluido en los servicios Web es el mismo, pero para poder usar el segundo tendremos que tener conexión a Internet.
4- Cuando escribimos esa dirección en el cuadro de Agregar referencia Web, se mostrará la descripción del servicio Web, así como la de cada una de las funciones que contiene, tal como podemos comprobar en la figura 4:
Figura 4, Información sobre el servicio Web antes de agregar la referencia WebNota:
La información mostrada es la misma que mostraría si se indicara en la barra de direcciones del Internet Explorer.4- Una vez que tenemos creada la referencia al servicio Web podemos acceder a la clase incluida en el servicio. Para poder acceder directamente a la clase sin tener que indicar el espacio de nombres en el que está incluida, habrá que agregar una importación de espacio de nombres, la importación que hay que hacer es al nombre que se ha indicado en la referencia.
Para saber qué nombre se ha usado, le echaremos un vistazo al Explorador de soluciones, tal como vemos en la figura 5, si hemos usado el servicio de localhost, el nombre usado es precisamente localhost, en el caso de que hagamos la referencia al servicio Web publicado en una dirección de Internet, el nombre será otro, por tanto hay que comprobar qué nombre es el que se ha usado en la referencia Web para saber cual usar.
Figura 5En la figura 6 vemos cómo crear esa importación, si el espacio de nombres que hemos usado se llama wsEjemplo2.
Figura 6, El espacio de nombres de la clase incluida en el servicio Web5- Una vez que tenemos la importación del espacio de nombres en el que está la clase del servicio Web, podemos usar esa clase como cualquier otra de .NET, por ejemplo para crear una variable de dicha clase (llamada Conversor) y crear un nuevo objeto, habría que hacer lo siguiente, según el lenguaje usado:
Para C# se usará este código:
Conversor conv = new Conversor();Para Visual Basic .NET usaríamos esta otra sintaxis:
Dim conv As New Conversor()6- El siguiente paso es crear el código a ejecutar cuando se haga click en el botón superior (para convertir de ºC a ºF), lo que tenemos que hacer es tomar el contenido de la caja de textos, convertirlo a un valor doble, crear un nuevo objeto de la clase conversora, llamar a la función que nos interese, le pasamos como parámetro el valor de los grados a convertir (que está en una de las cajas de textos) y el resultado devuelto, (una vez convertido a tipo string), se asigna en la otra caja de textos.
¿Mucho lío?
Cuando veas el código lo entenderás mejor... ya que está comentado en cada una de las acciones indicadas anteriormente.
Este es el código del evento Click del botón de convertir de grados centígrados (Celsius) a Fahrenheit:private void button1_Click(object sender, System.EventArgs e) { // Convertir de Centígrados a Fahrenheit this.label3.Text =""; try { // convertir el contenido del textBox en un valor doble // usando la función Parse de la clase Double double c = Double.Parse(textBox1.Text ); // creamos un nuevo objeto de la clase conversora Conversor conv = new Conversor(); // llamamos a la función de convertir ºC a ºF // el resultado que devuelve es un valor double // por tanto creamos una nueva variable y // le asignamos el valor devuelto por la función double f = conv.CaF(c); // asignamos a la otra caja de textos // el valor de la variable f, // pero convertido a una cadena textBox2.Text = f.ToString("0.##"); } catch(Exception ex) { label3.Text = ex.Message; } }7- Ahora sólo falta el código de convertir de grados Fahrenheit a Celsius, pero ese código te lo dejo para que tú lo hagas.
La solución en este link.