Llamadas asicronas a un Xml Web Service

julio 24, 2008

Introduccion

Una llamada asincrona a un servicio web es muy util porque al momento se hacer la llamada al servicio web desde nuestra aplicacion (en el caso de este ejemplo sera una aplicacion Windows) no se quedara colgada esperando la respuesta del servicio web. AL hacer una llamada asicncrona a un servicio web la aplicacion hace la peticion al servicio web y esta no se queda esperando la respuesta del servicio web si no que el control del programa vuelve a la aplicacion pudiendo efectuar otras tareas en la aplicacion mientras la respuesta del servicio web llegua a la aplicacion.

Paso a Paso

Lo primero que debemos hacer es crear nuestro Web Service con Visual Studio 2005. Nos vamos al menu Archivo ->Nuevo ->Sitio Web despues de aver hecho lo anterior en el cuadro de dialogo elegimos la opcion Servicio Web ASP .NET.

Una vez seleccionada la platilla para el servicio web, en ubucacion seleccionamos la opcion HTTP para que nuestro servico web se guarde dentro de nuestro IIS y despues seleccionar un nombre para el servicio web en nuestro caso se llamara http://localhost/WebService y en Lenguage seleccione el lenguage de su gusto en este caso usaremos C#.

Una vez creado el servicio web ponemos en comentarios el metodo “Hello World” del servicio web que tiene por default:

[WebMethod]
public string HelloWorld() {
return “Hola a todos”;
}

Una vez comentado quedar ade la siguiente Forma

//[WebMethod]
//public string HelloWorld() {
//   return “Hola a todos”;
//}

Una vez comentado el metodo “Hello World” creamos nuetro propio metodo para este ejemplo crearemos un metodo que reciva un parametro de tipo double y regrese el cuadrado de este. Lo primero que se debe de hacer para crear un metodo dentro de un servicio web es anteponer la sentencia: [WebMethod] lo que indica que el metodo siguiente es un metodo del servicio web.

[WebMethod]
public double Cuadrado(double val)
{
return Math.Pow(val, 2);
}

Lo siguiente que se debe hacer es compilar el servicio web (F5) pero en este caso como lo guardamos dentro de nuestro IIS lo compilamos con Ctrl+F5 una vez que haya creado copiamos las URL del servicio web en esta caso sera: “http://localhost/WebService/Service.asmx”.

Ya una vez creado nuestro sevivio web el siguiente pasa es crear nuestra aplicaion windows para consumir  el servicio web antes creado. para crear la aplicacion web nos vamos al menu Archivo->Nuevo->Proyecto y en el cuadro de dialogo escogemos la opcion “Aplicacion para Windows”.

Una vez creada la aplicacion para Windows agregamos una referencia web para asi hacer referencia al servicio web que antes creamos. Para agregar la referencia web hacemos click con boton derecho en el proyecto en el explorador de soluciones para este ejemplo se llamara “WindowsApplication1″ y elegimos la opcion Agregar referencia web:

Despues se abrira el siguiente cuadro de dialogo donde pegarmos la URL del servicio web que creamos anterior mente.

En la parte de Direccion URL pegaremos la direccion URL de nuestro web service, despues
daremos click en el boton “Ir”, una vez que demos click en “Ir” la caja de texto del nombre del servicio web y el boton “Agregar Referencia” se activaran para este ejemplo el nombre del servicio web lo dejaremos tal y como esta: “localhost” y finalemnte deremos click en “Agregar referencia”

El siguiente paso es agregar un control TextBox, Button y un Label en el formulario de nuestra aplicacion windows, seguido de esto en el codigo de la aplicacion importaremos nuestro servicio web haciendole un “using” en la parte del los “using’s”

using System.Windows.Forms; //codigo por defualt del Visual Studio
using
WindowsApplication1.localhost; //Parte donde importamos el servicio web

Una vez importado el serviocio web en el evento Click del Button que agregamos al formulario agregamos el siguiente codigo:

private void button1_Click(object sender, EventArgs e)
{
//Creamos una instancia del servicio web
Service objService = new Service();

objService.CuadradoCompleted += new CuadradoCompletedEventHandler(objService_CuadradoCompleted);

//Llamada asincrona al servicio web
objService.CuadradoAsync(
Convert.ToDouble(textBox1.Text));
}

Despues de agregar el codigo anterior al evento click del boton agregamos el siguiente metodo el cual.

void objService_CuadradoCompleted(object sender, CuadradoCompletedEventArgs e)
{
//Asignamos al control Label el resultado de la ejecucion del servicio web
label1.Text = El cuadrado de ” + textBox1.Text + ” es: ” + Convert.ToString(e.Result);
}
y por ultimo ejecutar la aplicacion para verifcar el resultado

Cabe mencionar que los metodos del servicio web pueden ser mas complejos que los del ejemplo tal y como pueden ser como obtener datos de una base de datos etc.


Seguir

Get every new post delivered to your Inbox.