Cómo crear un servicio RESTful en WCF

WCF (Windows Communication Foundation) es una plataforma de mensajería segura, confiable y escalable que se puede usar para crear servicios web en .Net. Proporciona un modelo de programación unificado para desarrollar aplicaciones orientadas a servicios.

Puede usar WCF para crear servicios RESTful en .NET. REST (Representational State Transfer) es un paradigma de arquitectura que se ajusta a los principios de la arquitectura REST. La arquitectura REST se basa en el concepto de recursos: utiliza recursos para representar el estado y la funcionalidad de una aplicación. Estos recursos, a su vez, se identifican mediante URI sobre el protocolo HTTP.

Creando un servicio WCF

En esta sección, exploraremos cómo podemos construir un servicio RESTful en WCF. En primer lugar, creemos un nuevo servicio WCF en Visual Studio. Para hacer esto, siga los pasos que se describen a continuación. Tenga en cuenta que para crear la aplicación ilustrada en este artículo, he usado Visual Studio 2015, aunque también puede usar Visual Studio 2012 o 2013.

  1. Abrir Visual Studio 2015
  2. En el menú Archivo en Visual Studio IDE, haga clic en Inicio -> Archivo -> Nuevo -> Proyecto
  3. A continuación, seleccione WCF de la lista de plantillas de proyecto que se muestran
  4. Seleccione "Aplicación de servicio WCF" en el panel del lado derecho
  5. Especifique un nombre para su proyecto de servicio WCF y haga clic en Aceptar para guardarlo

Esto crearía un nuevo proyecto de aplicación de servicio WCF con el nombre que especificó. El proyecto también contendría un servicio predeterminado solo con fines ilustrativos.

Implementación del servicio WCF RESTful

Al trabajar con WCF, primero debe crear un contrato de servicio y luego definir las operaciones de servicio o los contratos de operación en él. Normalmente, un servicio WCF consta de lo siguiente:

  1. Clase de servicio
  2. Contrato de servicios
  3. Uno o más contratos de operación
  4. Uno o más puntos finales
  5. Entorno de alojamiento

Un ServiceContract se utiliza para especificar las operaciones que están disponibles para que las consuma el cliente del servicio. El siguiente fragmento de código muestra cómo se ve un contrato de servicio; lo modificaremos más adelante para que sea RESTful.

 [ServiceContract]

    public interface ICustomerService

    {

        [OperationContract]

        List GetCustomerList();

    }

Un DataContract se utiliza para describir los datos que deben intercambiarse entre el proveedor de servicios y el consumidor de servicios. Considere el siguiente DataContract llamado Cliente.

[DataContract(Namespace = "")]

public class Customer

    {

        [DataMember]

        public Int32 CustomerID { get; set; }

        [DataMember]

        public string FirstName { get; set; }

        [DataMember]

        public string LastName { get; set; }

        [DataMember]

        public String Address { get; set; }

    }

Un contrato de operación se utiliza para exponer un método como un método de servicio y también el flujo de transacciones, la dirección de la operación del servicio y también los contratos de falla que pueden estar asociados. El siguiente fragmento de código ilustra cómo puede declarar una operación de servicio usando el atributo OperationContract y el uso del atributo WebInvoke para especificar la operación HTTP, Uri, formato de mensaje web, etc.

[OperationContract]

        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,

        BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetCustomers")]

List GetCustomerList();

El siguiente fragmento de código ilustra cómo se puede hacer RESTful el servicio al cliente aplicando el atributo WebInvoke en su método de servicio.

public interface ICustomerService

    {

        [OperationContract]

        [WebInvoke(Method = "GET",

            ResponseFormat = WebMessageFormat.Json,

            BodyStyle = WebMessageBodyStyle.Wrapped,

            UriTemplate = "GetCustomers")]

        List GetCustomerList();

    }

La clase CustomerService extiende el contrato de servicio ICustomerService y proporciona la implementación de la operación de servicio denominada GetCustomerList. Así es como se vería la clase CustomerService.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    public class CustomerService : ICustomerService

    {     

        public List GetCustomerList()

        {

            return PopulateCustomerData();

        }

        private List PopulateCustomerData()

        {

            List lstCustomer = new List();

            Customer customer1 = new Customer();

            customer1.CustomerID = 1;

            customer1.FirstName = "John";

            customer1.LastName = "Meaney";

            customer1.Address = "Chicago";

            lstCustomer.Add(customer1);

            Customer customer2 = new Customer();

            customer2.CustomerID = 1;

            customer2.FirstName = "Peter";

            customer2.LastName = "Shaw";

            customer2.Address = "New York";

            lstCustomer.Add(customer2);

            return lstCustomer;

        }

    }

Tenga en cuenta que el método PopulateCustomerData no es un método de servicio; es un método privado que devuelve una lista de registros de clientes y se llama desde el método de servicio GetCustomerList.

Lo siguiente que debe hacer es configurar el servicio WCF. Para hacer esto, necesitaría especificar los detalles de enlace y punto final y también el comportamiento del servicio. El siguiente fragmento de código muestra cómo debería verse la configuración del servicio para este servicio.

   

     

       

       

     

   

   

     

       

         

         

       

     

     

       

         

       

     

   

   

 

Y eso es todo lo que tienes que hacer. Ahora puede abrir un navegador web y probar su servicio WCF RESTful.