Creando un servicio WCF básico con JSON

En este tutorial, veremos cómo crear de forma sencilla un servicio WCF que haga uso de JSON.

El primer paso es crear una solución de código web en blanco en Visual Studio

wcfjson01

Luego de esto, adicionamos un nuevo ítem, y seleccionamos en el tipo un Servicio WCF

wcfjson02

Para comenzar a desarrollar el ejemplo, adicionaremos una clase Persona con unos datos básicos, de la siguiente forma:

using System.Runtime.Serialization;

namespace EjemploWcfJSon.Entidades
{
    [DataContract]
    public class Persona
    {
        [DataMember]
        public int IdPersona { getset; }

        [DataMember]
        public string Nombre { getset; }

        [DataMember]
        public string Direccion { getset; }

        [DataMember]
        public string Edad { getset; }
    }
}

Es importante anotar que para un correcto funcionamiento en WCF, la clase debe llevar obligatoriamente el atributo DataContract y las propiedades el atributo DataMember.

Luego de esto, adicionamos en la interface del servicio la firma del método a implementar para el ejemplo, de la siguiente forma:

    [ServiceContract]
    public interface IPersona
    {
        [OperationContract]
        [WebGet(UriTemplate = "ConsultarPersonas", 
                RequestFormat = WebMessageFormat.Json, 
                ResponseFormat = WebMessageFormat.Json)]
        List<Entidades.Persona> ConsultarPersonas();
    }

En esta clase, resaltamos el uso del atributo WebGet, en el cual especificamos el formato que queremos utilizar en nuestro servicio, el cual es JSON en este caso.

Luego, lo que haremos es escribir el código del servicio que implementará la interface. En este, adicionamos un código para que retorne una colección de datos de ejemplo de la siguiente forma:

        public List<Entidades.Persona> ConsultarPersonas()
        {
            List<Entidades.Persona> personas = new List<Entidades.Persona>();

            personas.Add(new Entidades.Persona() { IdPersona = 1, Nombre = "Hernan", Direccion = "Carrera 50", Edad = "26" });
            personas.Add(new Entidades.Persona() { IdPersona = 1, Nombre = "Jose", Direccion = "Calle 70", Edad = "54" });
            personas.Add(new Entidades.Persona() { IdPersona = 1, Nombre = "Jaime", Direccion = "Carrera 7", Edad = "13" });
            personas.Add(new Entidades.Persona() { IdPersona = 1, Nombre = "Alejandro", Direccion = "Calle 30", Edad = "29" });
            personas.Add(new Entidades.Persona() { IdPersona = 1, Nombre = "Cesar", Direccion = "Carrera 10", Edad = "35" });

            return personas;
        }

Finalmente, debemos adicionar una configuración al web.config para que nuestro servicio WCF tenga un endpoint configurado para funcionar con JSON. La modificación se hace agregando alguna configuración en los elementos <endpointBehaviors />, <bindings /> y <services />

El archivo web.config resultante se verá así:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
        multipleSiteBindingsEnabled="true" />    
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBindingJson" crossDomainScriptAccessEnabled="true"/>
      </webHttpBinding>
    </bindings>    
    <services>
      <service name="EjemploWcfJson.Servicio.Persona" >
        <endpoint address="" binding="webHttpBinding" bindingConfiguration="webHttpBindingJson" contract="EjemploWcfJson.Servicio.IPersona" behaviorConfiguration="web"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

Una vez hecho esto, ya podemos ejecutar el servicio desde un navegador, y veremos la respuesta con los datos en formato JSON.

wcfjson03

Si la prueba la hacemos en Internet Explorer, obtendremos un archivo para descarga, que podemos abrir con un editor de texto y veremos que contiene los mismos datos.

Espero que este ejemplo sea de utilidad. El código del mismo lo pueden encontrar en mi cuenta de GitHub.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: