webservices

WCF (III): Creación de un cliente de un webservice


Ahora que ya hemos creado nuestro primer servicio, es el momento de consumirlo. Al igual que hicimos en ejemplos anteriores, comenzaremos creando un nuevo proyecto, por ejemplo de consola.

Es importante tener a mano la dirección del servicio, ya que nos hará falta para referenciarlo. Si estamos desarrollando el cliente en el mismo equipo en el que desarrollamos el webservice, bastará con copiar la dirección del WCF Test Client que Visual Studio creará por nosotros y que vimos en el artículo anterior.

Seleccionaremos la sección References del proyecto y haremos click derecho sobre ella, seleccionando la opción Add Service Reference… para añadir una referencia de servicio.

En el campo Address (dirección), insertaremos el valor que copiamos previamente. El hecho de que la dirección termine en mex indica que se trata el servicio de metadatos creado por defecto, que proporcionará la información sobre el resto de endpoints del servicio web. Más adelante profundizaremos en el concepto de endpoint y aprenderemos qué son, cómo configurarlos y cómo acceder a ellos.

(más…)

WCF (II) : Creación de un servicio web simple


Comprendidos los principios sobre los que se basa Windows Communication Foundation, es momento de crear un pequeño servicio básico que maneje una lista interna de clientes. No haremos uso de bases de datos, puesto que el objetivo principal de este artículo es centrarnos en la comunicación. El último artículo dedicado a Entity Framework desarrolla, precisamente, un ejemplo más específico del uso de Entity Framework para desarrollar un servicio web RESTful mediante WCF.

Como vimos en el artículo anterior, a grandes rasgos un servicio WCF se compondrá de cuatro elementos:

  • Contrato de datos: estructura de datos que será intercambiada por el servicio.
  • Contrato de servicio: interfaz que expondrá los métodos que pueden ser invocados por el cliente.
  • Implementación del servicio: codificación del contrato de servicio, incorporará la lógica interna del servicio.
  • Configuración: fichero XML con información sobre dirección, nombre o protocolo.

Comenzaremos creando el servicio para pasar, a continuación, por el primero de estos elementos: el contrato de datos.

Creación del servicio

Para comenzar la codificación de nuestro servicio, crearemos un nuevo proyecto WCF, específicamente del tipo WCF Service Library, que generará una biblioteca DLL que contendrá la funcionalidad del servicio.

(más…)

WCF (I): Introducción a Windows Communication Foundation


La plataforma .NET sufrió su gran transformación a partir de sus versiones 3.0/3.5, momento en el que surgen oficialmente las ahora conocidas como Foundations, orientadas a especializar secciones completas del framework. Windows Communication Foundation, originalmente conocida por el nombre de Indigo, es la parte encargada, como su propio nombre indica, de las comunicaciones y mensajería, aunque su principal uso son los servicios web.

Hasta el momento, el servicio de mensajería entre aplicaciones se realizaba mediante los protocolos COM, DCOM o MSQM, que obligaba a los programadores a ceñirse no sólo a una forma de programación concreta, sino que también estaba atada a la plataforma y al lenguaje de programación. Los servicios web surgen con el propósito de cambiar esta filosofía, permitiendo hacer la comunicación independiente de lenguaje de programación y plataforma gracias a la creación de estándares de comunicación. No importará si un servicio está codificado en Java o .NET, ni si corre en una plataforma Windows o Linux: lo importante será que respeten los estándares del protocolo sobre el cual está construido, del mismo modo que ocurre con los servidores web.

Tipos de servicios web

A día de hoy existe una gran variedad de protocolos sobre los que los servicios web pueden operar, pero son dos los protocolos estrella que la práctica totalidad de los servicios web utilizan hoy día:

  • SOAP: Simple Object Access Protocol. Creado en 1998, se sirve de mensajes XML para el intercambio de mensajes. Puede operar sobre cualquier protocolo de transporte, aunque lo más común es que lo haga sobre HTTP o HTTPS. Es el protocolo más común en servicios web de carácter privado.
  • REST: REpresentational State Transfer. Concepto surgido en el año 2000, hace uso del protocolo HTTP para el envío de mensajes, y puede utilizar lenguajes como XML o JSON.

(más…)

Entity Framework (VI): Webservices


Hasta ahora hemos visto el funcionamiento de LINQ y Entity Framework. La siguiente serie de artículos estarán orientados hacia los servicios web, por lo que haremos una pequeña introducción aplicando los conocimientos que hemos obtenido hasta el momento.

Lo primero que deberemos aclarar es el propio concepto de servicio web. Ya vimos en artículos anteriores de qué se tratan, cómo se crean y cómo se consumen estas pequeñas aplicaciones cuyo objetivo es el intercambio de información entre distintas plataformas y lenguajes de modo estándar.

Para crear un nuevo servicio web, crearemos un nuevo proyecto web de tipo ASP.NET Empty Web Application y le asociaremos un nuevo nombre. Los servicios web reciben ese nombre porque operan sobre el protocolo HTTP, así que este será nuestro punto de partida.

(más…)

Servicios Web (II): Consumiendo un servicio web


Veíamos anteriormente cómo crear un servicio web simple. A continuación veremos cómo consumirlo.

Si crear un WebService no tiene demasiada dificultad, consumirlo es, si cabe, mucho más sencillo. Crearemos una aplicación web normal y corriente, y sobre ésta, haremos click derecho y seleccionaremos la opción [Agregar Referencia Web…]

0906agregarreferenciaweb
Hecho esto, se desplegará un menú que nos permitirá la detección de servicios web. Si introducimos la dirección en la que el servicio está publicado y pulsamos en «Ir» se nos mostrará los métodos que el servicio expone. En la caja de texto derecha añadiremos el nombre que tendrá nuestra referencia (por ejemplo, ServicioSimple) y pulsaremos sobre [Agregar referencia].

0906servicio

Hecho esto, se agregará a nuestro proyecto una referencia a nuestro servicio web, que se mostrará en nuestro proyecto de la siguiente manera:

0906referencia

Finalmente, añadiremos controles a nuestra página para comprobar que nuestra aplicación se comunica perfectamente con el servicio web. Para ello crearemos un GridView, dos Label, una caja de Texto y tres botones.

En el primer botón codificaremos la funcionalidad para cargar el GridView con la primera tabla del DataSet devuelto por el método GetData() de nuestro servicio web. Para ello crearemos una referencia a nuestro servicio, crearemos una referencia a un DataSet e invocaremos el método GetData() del WebService. Finalmente rellenaremos el Grid con el resultado obtenido.

protected void ButtonGrid_Click(object sender, EventArgs e)
{
// Referenciamos el servicio
ServicioSimple.Service referenciaServicio = new ServicioSimple.Service();

// Creamos una referencia a un DataSet
DataSet ds;

// Invocamos el WebMethod GetData()
ds = referenciaServicio.GetData();

// Rellenamos el DataGrid
GridViewDatos.DataSource = ds.Tables[0];
GridViewDatos.DataBind();
}

En el segundo botón haremos que nuestro label muestre el resultado de la invocación al método GetDate(), que recordemos que devolvía la fecha actual.

protected void ButtonFecha_Click(object sender, EventArgs e)
{
// Referenciamos el servicio
ServicioSimple.Service referenciaServicio = new ServicioSimple.Service();

LabelFecha.Text = referenciaServicio.GetDate().ToString();
}

Por último, el tercer botón mostrará el resultado de invocar al método GetDateDiff(int). Para ello le pasaremos al WebService un parámetro que indicará el número de horas que tiene que añadir. Para ello utilizaremos la caja de texto.

protected void ButtonFechaDiff_Click(object sender, EventArgs e)
{
// Referenciamos el servicio
ServicioSimple.Service referenciaServicio = new ServicioSimple.Service();

if (!string.IsNullOrEmpty(TextBoxDiferencia.Text))
{
LabelFechaDiferencia.Text = referenciaServicio.GetDateDiff(Convert.ToInt32(TextBoxDiferencia.Text)).ToString();
}
}

Hecho. Ya hemos creado un servicio web y hemos aprendido a consumirlo.

0906resultado

Servicios Web (I): Creando un servicio web simple


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…

0906servicioweb01
Hecho esto, seleccionaremos la plantilla «Servicio Web ASP.NET», y alojaremos el servicio web en nuestro IIS indicándole la ruta que deseemos.

0906servicioweb02
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:
0906servicioweb03
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:

0906servicioweb05
En caso contrario, se nos pedirá que introduzcamos el parámetro requerido, lo cual nos llevará a la obtención del dato.

0906servicioweb04
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&gt;

Posteriormente comprobaremos cómo realizar una invocación a un servicio web desde nuestra aplicación.