En este tutorial veremos que es un servicio web, como crearlo y como consumirlo desde una aplicación de escritorio.
Que es un Servicio Web
Un servicio web es una “pequeña” unidad de codigo, que tiene cierta funcionalidad, que es independiente de la plataforma, independiente del lenguaje y que permite interconectar sistemas distintos (o el mismo sistema distribuido).
Es independiente de la plataforma ya que puede ser consumido desde cualquier lado, gracias al uso de protocolos estandar y bien conocidos como lo son HTTP, SOAP, XML, etc. Asi por ejemplo, podemos estar en Windows consumiendo un servicio web que corra en otro sistema operativo, eso gracias a que los datos que se manejan son XML.
Resumiendo, un servicio web es un trozo de funcionalidad que corre en un servidor, el cual expone metodos para que sean “ejecutados” (en realidad no se ejecuta ningun metodo de manera explicita, sino que se lo hace a traves de mensajes, mediante SOAP) por los clientes.
Como crear un Servicio Web
Para crear un servicio web deberemos abrir Visual Studio, y seleccionar Crear un nuevo proyecto, la imagen a continuación ilustra lo dicho:
Llamaremos a nuestro servicio “MiServicio”, y haremos clic en el botón “OK”; nuestro servicio expondrá un método que simplemente devolverá un DataTable con un conjunto de datos, luego usaremos esos datos desde nuestra aplicación WIN32 para mostrarlos en una grilla.
Cuando vemos el explorador de proyectos vemos que .NET nos genero automáticamente un archivo llamado “Service1.asmx”, ese es el servicio que será publicado, nosotros vamos a renombrar ese archivo y lo llamaremos “ServicioWeb”.
Quitamos el método “HolaMundo” y agregamos uno llamado “DevolverTabla”, y lo llenaremos de la siguiente manera:
Noten que el método esta marcado con el atributo [WebMethod], esto indica que será expuesto para ser consumido por los clientes, si ejecutamos ahora el proyecto veremos algo como lo que sigue:
Si hacemos clic en DevolverTabla veremos el resultado de la función:
Si desde el explorador de Internet, agregáramos “?WSDL” luego de la dirección podremos ver la descripción del servicio web, es la manera que nos provee el servicio web para que quienes lo consumen sepan o conozcan su interfaz, por ejemplo:
El resultado es el descriptor, que brinda información acerca del servicio web y de las operaciones contenidas en el.
Hemos terminado así la creación del servicio web, a continuación crearemos el proyecto que correrá en el escritorio y que consumirá a este servicio.
Creando la aplicación cliente
Para ello lo que haremos será agregar un nuevo proyecto al proyecto actual, deberemos ir File->Add New Project y luego agregar un proyecto del tipo “Windows Application”:
Lo llamaremos “AplicacionCliente”, y damos clic en “OK”. Ahora, parados sobre el proyecto nuevo haremos clic derecho y luego clic en “Add Web Reference”, una ventana como la que sigue aparecerá:
Esta ventana nos facilita la tarea de agregar una referencia web, nosotros tenemos nuestro servicio en la misma solución que el proyecto WIN32 así es que seleccionaremos la opcion “Web Services in this solution”, lo que nos mostrara una lista con los posibles servicios web (en nuestro caso solo uno):
Hacemos clic sobre “ServicioWeb”, y a continuación donde dice “Web referente name” escribiremos como será llamada la referencia, nosotros pondremos “ServicioWeb” (original, ¿no?).
Ahora sobre el formulario que se creo en el proyecto Windows, Form1.cs, agregaremos una grilla, y en el evento Load() del formulario escribiremos:
ServicioWeb.ServicioWeb srv=new ServicioWeb.ServicioWeb();
this.dataGridView1.DataSource=srv.DevolverTabla();
Esas simples líneas se tomaran el trabajo de “ejecutar“ el método DevolverTabla y asignarlo como fuente de la grilla, el resultado de la ejecución del proyecto mostrará lo siguiente:
Como vemos, hemos “enlazado” con éxito una aplicación a un servicio web; en futuros tutoriales veremos como enviar datos al servicio web desde la aplicación, además veremos como tener un servicio web con un solo método expuesto y que por reflexión ejecute métodos de una clase en particular según el nombre que le pasemos.
Espero les hay sido útil, saludos desde Córdoba, Argentina.
Código fuente