Un servicio web no es más que un conjunto de protocolos y estándares cuyo objetivo es el intercambio de información entre distintas aplicaciones. Los servicios web tienen la peculiaridad de ser independientes de plataforma, es decir, cumplen estándares propios y no dependen ni del hardware sobre el que se ejecuta ni del sistema operativo o servidor web que lo aloja.
Un servicio web intercambia información. Al invocar un servicio web estamos realizando una petición a otra máquina, a la que (opcionalmente) le enviamos información, la procesa y nos devuelve una respuesta, generalmente atómica y serializable, es decir: lo común es que un servicio web nos devuelva un dato o estructura de datos con la información que necesitemos (atómica) en forma de cadena de texto (serializable). Esto es así por el lenguaje común que «hablan» los servicios web: XML.
Si quisiéramos crear un servicio web, en una solución en blanco pulsaríamos sobre Agregar > Nuevo sitio Web…
Hecho esto, seleccionaremos la plantilla «Servicio Web ASP.NET», y alojaremos el servicio web en nuestro IIS indicándole la ruta que deseemos.
A continuación, crearemos los métodos que queramos exponer, añadiendo el atributo [WebService] a la clase y el atributo [WebMethod] a los métodos que deban ser expuestos.
Crearemos tres métodos: uno que devuelva la hora actual, otro que devuelva nuestra localización geográfica y otro que añada las horas pasadas como parámetro a la hora actual.
using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; [WebService(Namespace = "http://localhost/Services/Date")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { public Service () { //Eliminar la marca de comentario de la línea siguiente si utiliza los componentes diseñados //InitializeComponent(); } [WebMethod] public DateTime GetDate() { return DateTime.Now; } [WebMethod] public string GetLocation() { return "UTC/GMT +2, Madrid, Spain."; } [WebMethod] public DateTime GetDateDiff(int horasDiferencia) { return DateTime.Now.AddHours(horasDiferencia); } }
Hecho esto, iremos a la dirección de nuestro servicio web, lo cual nos mostrará lo siguiente:
Para probar el servicio web, haremos click sobre cualquiera de los métodos expuestos. Si el webservice no requiere ningún parámetro, se nos mostrará directamente el resultado de la invocación:
En caso contrario, se nos pedirá que introduzcamos el parámetro requerido, lo cual nos llevará a la obtención del dato.
Si analizamos el contenido de la respuesta, comprobaremos que, efectivamente, se trata de un fichero XML.
<?xml version="1.0" encoding="utf-8"?>
<dateTime xmlns="http://localhost/Services/Date">2009-06-09T17:27:00.0874935+02:00</dateTime>
Posteriormente comprobaremos cómo realizar una invocación a un servicio web desde nuestra aplicación.