Consumir un Web Service desde Windows.Form con C# y VB

[Consumir un WebMethod: Random]

Fecha: 20/Feb/2005 (17/Feb/2005)
Autor: SergioTarrillo - Email
Blog: sergiotarrillo Blog

 


Introduccion

Saludos a todos desde Perú, como es mi estilo este ejemplo es sencillo y práctico para todos aquellos que quieran iniciarse en el llamado de Web Service, para correr el ejemplo es necesareo el .Net Framework (el VS lo instala automáticamente) y tener salida a Internet, para poder consumir el Web Service. Explicaremos como usar una referencia Web, y como usarla en nuestra aplicación, en este caso en una aplicacion de escritorio, WindowsForm, con C# y VB.

Manos a la Obra

1. Bueno lo primero y que primero que debemos hacer es crear nuestro proyecto en VS.Studio, crearemos una aplicación Windows.Form con C# y VB, yo use estos lenguajes pero ustedes pueden hacerlo con J#, son los mismo pasos.

2. Agregamos los controles mostrados en la siguiente imagen, 3 cajas de texto: txtMin, txtMax, txtCount, un botón cmdRnd, y una lista lstNums.

La funcion que vamos a consumir requiere tres parametros el numero minmo, el maximo, y la cantidad de numero que deseamos. Este WebMethod, retorna un arreglo de enteros. Nosotros solo vamos a consumir un metodo del servicio Web, es como si llamaramos a una funcion de algun otro proyecto, pero con la diferencia que esta funcion esta en un webService. Para poder usar los metodos de un WebService debemos agregar una referencia en el explorador de souciones (para C# y VB es lo mismo).

3. Agregar una Referencia Web a la url del Web Service

En ventana que aparecela url colocamos lo siguiente: http://www.golemproject.com/Apps/96/Generator.asmx, que es la direccion del Web Service que vamos a consumir, pueden probarlo directamente desde su navegador. Damos click en el boton agregar referencia (no olvides ponerle nombre a la referencia yo use RandomNumber):

Listo ya tenemos nuestra referencia a nuestro proyecto ahor podemos consumir todos los servicios de este Web Service.

Agregando el código a nuestor Windows.Form.

Primero debemos importar el NameSpace, para poder referenciarlos mas rápido en la codificación, esto se hace en nuestro Formulario:

[C#]

    using rnd = CallWebService.RandomNumber;

[VB]

   Imports Rnd = vbCallWebService.RandomNumber

Bueno ahora se creara una variable publica, un arreglo, y un función publica que llenara el listBox con los elementos del arreglo. Algunos a esta función que no retorna ningún tipo de datos suelen llamarloe procedimientos pero ese es otro tema.

[C#]

     //variables globales
     public int[] numbers;

     //funcion para llenar el listBox
     public void LlenarListBox() {
       //limpiando la lista
       lstNums.Items.Clear();

       //llenando el ListBox
       for ( int i=0 ; i< numbers.Length; i++){
         lstNums.Items.Add(numbers[i]);
       }
     }

[VB]

   '//variables globales
   Public numbers As Integer()

   '//funcion para llenar el listBox
   Public Sub LlenarListBox()

      'limpiando el ListBox
      lstNums.Items.Clear()

      '//llenando el ListBox
      For i As Integer = 0 To numbers.Length - 1
         lstNums.Items.Add(numbers(i))
      Next

   End Sub

Nota: Solo se declara el arreglo, no es necesario darle el tamaño, este se le dará en tiempo de ejecución.

Consumiendo el Web Service: ahora toca lo importante y fundamental, consumir un servicio del Web Service que hemos hecho referencia. Primero recuperamos las variables ingresadas por el usuario, usamos el try, para validar que se ingresen datos correctos. Luego le damos tamaño al arreglo con el valor ingresado. Ahora para poder consumir un servicio, instanciamos un objeto, del webService, y posteriormente llamamos a un metodo de este webService, con el cual llenamos el arreglo, en otras palabras en código sería asi:

[C#]

     private void cmdRnd_Click(object sender, System.EventArgs e) {

       //varaibles de uso
       int num, min, max;

       //metiendole una excepcion por siaca
       //haya error
       try {
         num = Convert.ToInt16(txtCount.Text);
         min = Convert.ToInt16(txtMin.Text);
         max = Convert.ToInt16(txtMax.Text);

         //reservando el tamaño del arreglo
         numbers = new int[num];

         //Declarando el WEbSErvice
         rnd.Generator wsRnd = new rnd.Generator();

         //CONSUMIENDO EL WEB SERVICE
         numbers = wsRnd.GenerateRandomDotOrg(min,max,numbers.Length);

       } catch (Exception ex) {
         MessageBox.Show("ocurrio un error: " + ex.Message.ToString());
       }


       //ahora llamar a la funcion que llena el listBox
       this.LlenarListBox();
     }

[VB]

   Private Sub cmdRnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRnd.Click
      '//varaibles de uso
      Dim num, min, max As Integer

      '//metiendole una excepcion por siaca
      '//haya error
      Try
         num = Convert.ToInt16(txtCount.Text)
         min = Convert.ToInt16(txtMin.Text)
         max = Convert.ToInt16(txtMax.Text)

         '//reservando el tamaño del arreglo
         ReDim numbers(num)

         '//Declarando el WEbSErvice
         Dim wsRnd As New Rnd.Generator

         '//CONSUMIENDO EL WEB SERVICE
         numbers = wsRnd.GenerateRandomDotOrg(min, max, num)

      Catch ex As Exception
         MessageBox.Show("ocurrio un error: " + ex.Message.ToString())
      End Try

      '//ahora llamar a la funcion que llena el listBox
      Me.LlenarListBox()

   End Sub

Conclusión

SComo vieron consumir un WebService no es díficil, solo hay que conocer los pasos y listo, un Servicio web también se puede consumir des una aplicación consola, desde una aplicación Web, desde una aplicación móvil, y desde cualquier dispositivo que tenga salida a internet, eso queda como tema de investigación. Yo use un Web Service de la Red, aca mismo puede encontrar artículos de como crear un Web Service en caso de que quieran probarlo con su propio web Service. No olviden calificar el artículo, y si tienen algun comentario solo me lo hacen saber.


Espacios de nombres usados en el código de este artículo:

System.Windows.Form, esa principalmente y la externa que es el webService


ir al índice

Fichero con el código de ejemplo: sergio_CallWebService.zip - Tamaño 48 KB