WCF REST Services
Operaciones WCF para la Web
Estas operaciones se exponen a traves de URIs, los mensajes se transmiten sin la sobrecarga de SOAP, los parametros se pasan usando HTTP, el formato de los datos puede ser JSON o POX. WCF provee WebHttpBinding binding para soportar estas caracteristicas. Este binding tiene dos elementos. El primero es un nuevo encoder llamado WebMessageEncodingBindingElement, el cual permite seleccionar entre JSON o POX. El segundo elemento es un elemento binding de transporte basado en HttpTransportBindingElement o HttpsTransportBindingElement. El HttpsTransportBindingElement es usado para seguridad a nivel de transporte.
Para el binding WebHttpBinding pueden ser usados dos behaviors. El WebHttpBehavior y el WebScriptEnablingBehavior. El WebScriptEnablingBehavior behavior se usara para AJAX y JSON. El WebHttpBehavior behaviorse usa para formatear los mensajes usando JSON o XML. El valor por defecto es usar XML.
Ejemplo:
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
[ServiceContract]
public interface IMensaje
{
[OperationContract]
[WebGet]
string Responder(string mensaje);
}
using System;
using System.ServiceModel;
public class ServicioMensaje : IMensaje
{
#region IMensaje Members
public string Responder(string mensaje)
{
return mensaje;
}
#endregion
}
<system.serviceModel>
<services>
<service name="ServicioMensaje">
<endpoint address=""
behaviorConfiguration="WebBehavior"
binding="webHttpBinding" contract="IMensaje"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
POX y REST se basan ambos en invocaciones a traves de URLs para llamar a los metodos. Donde tienen diferencias es en la forma como son definidos estos URLs, y que verbos HTTP son usados para invocar las operaciones en cada URL.
WebGet Y WebInvoke
Los servicios pueden ser expuestos usando WebHttpBinding binding, usando ya sea los atributos WebGet o WebInvoke. Cada atributo especifica el verbo HTTP, el formato del mensaje y el estilo del cuerpo que se requiere para exponer una operacion.
WebGet
Este atributo exponer el verbo GET. Get tiene ventajas sobre los verbos HTTP. Primero, el endpoint puede ser accesado directamente via un navegador ingresando el URL del servicio en la barra de direcciones. Los parametros pueden ser enviados dentro del URI como query strings o dentro del URI. Este atributo debe ser usado para recuperacion.
WebInvoke
Este atributo expone los servicios usando los verbos HTTP como POST, PUT y DELETE. Por defecto es POST, pero puede ser modificado configurando la propiedad "Method" del atributo. Estas operaciones sirven para modificar recursos, por lo tanto este atributo debe ser usado para realizar modificaciones a recurso.
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace EssentialWCF
{
[ServiceContract]
public class ServicioCliente
{
[OperationContract]
[WebGet(UriTemplate="/cliente/{id}")]
public Customer LeerCliente(int id)
{
Customer customer = null;
// Leer cliente de la base de datos
return customer;
}
[OperationContract]
[WebInvoke(Method = "PUT", UriTemplate = "/cliente/{id}")]
public void EnviarCliente(int id, Customer customer)
{
// Grabar en la base de datos
}
[OperationContract]
[WebInvoke(Method = "DELETE", UriTemplate = "/cliente/{id}")]
public void EliminarCliente(int id)
{
// Grabar en la base de datos
}
}
}