viernes, 5 de diciembre de 2014

Configuración de Servicio Web REST CRUD

Creamos nuestra base de datos con la siguiente estructura:

GO
CREATE TABLE [dbo].[t_marcas](
            [codigo] [int] NOT NULL,
            [nombre] [varchar](20) NOT NULL,
            [pais] [varchar](30) NOT NULL,
 CONSTRAINT [PK_t_marcas] PRIMARY KEY CLUSTERED
(
            [codigo] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[t_accesorios]    Script Date: 11/24/2014 21:36:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON

Ahora, en nuestra solución .NET agregaremos un nuevo proyecto.

Cambiaremos de nombre al servicio “Service1” por “Marcas”. De igual manera cambiaremos “IService1” por “IMarcas”. También agregaremos al proyecto las carpetas “Dominio” y “Persistencia”. 
Luego crearemos la clase “Marcas.cs” dentro de la carpeta “Dominio” con el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;

namespace GestionServices.Dominio
{
    [DataContract]
    public class Marca
    {
        [DataMember]
        public int Codigo { get; set; }
        [DataMember]
        public string Nombre { get; set; }
        [DataMember]
        public string Pais { get; set; }
    }
}

Luego crearemos la clase “ConexionUtil.cs” dentro de la carpeta “Persistencia”, con el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace GestionServices.Persistencia
{
    public class ConexionUtil
    {
        public static string ObtenerCadena()
        {
            return "Data Source=(local);Initial Catalog=BD_ALQUILER_VEHICULOS;Integrated Security=SSPI;";
        }
    }
}
Luego dentro de la misma carpeta adicionaremos la clase “MarcaDAO”, con el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using GestionServices.Dominio;
using NHibernate.Criterion;

namespace GestionServices.Persistencia
{
    public class MarcaDAO : BaseDAO<Marca, int>
    {
        public Marca ObtenerXNombre(string nombre)
        {
            return NHibernateHelper.ObtenerSesion().
                CreateCriteria(typeof(Marca)).
                Add(Restrictions.Eq("Nombre", nombre)).
                UniqueResult<Marca>();
        }
    }
}
Ahora editaremos el archivo “Marcas.svc” con el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using GestionServices.Dominio;
using GestionServices.Persistencia;

namespace GestionServices
{
    public class Marcas : IMarcas
    {
        private MarcaDAO dao = new MarcaDAO();

        public Mensaje CrearMarca(Marca marca)
        {
            Mensaje mensajeRetorno = new Mensaje();

            Marca marcaConsultada = dao.ObtenerXNombre(marca.Nombre);

            if (marcaConsultada == null)
            {
                Marca marcaCreada = dao.Crear(marca);

                if (marcaCreada != null)
                {
                    mensajeRetorno.codigoMensaje = "S";
                    mensajeRetorno.textMensaje = "Marca creada exitosamente";
                }
                else
                {
                    mensajeRetorno.codigoMensaje = "E";
                    mensajeRetorno.textMensaje = "No se pudo crear la marca";
                }
            }
            else
            {
                mensajeRetorno.codigoMensaje = "E";
                mensajeRetorno.textMensaje = "Ya existe una marca registrada con este nombre";
            }

            return mensajeRetorno;
        }

        public Marca ObtenerMarca(string codigo)
        {
            return dao.Obtener(Int32.Parse(codigo));
        }

        public Marca ObtenerXNombre(string nombre)
        {
            return dao.ObtenerXNombre(nombre);
        }

        public Mensaje ModificarMarca(Marca marca)
        {
            Mensaje mensajeRetorno = new Mensaje();

            Marca marcaConsultada = dao.ObtenerXNombre(marca.Nombre);

            if (marcaConsultada != null)
            {
                if (marcaConsultada.Codigo != marca.Codigo)
                {
                    mensajeRetorno.codigoMensaje = "E";
                    mensajeRetorno.textMensaje = "Ya existe una marca registrada con este nombre";
                    return mensajeRetorno;
                }
            }

            Marca marcaModificada = dao.Modificar(marca);

            if (marcaModificada != null)
            {
                mensajeRetorno.codigoMensaje = "S";
                mensajeRetorno.textMensaje = "Marca modificada exitosamente";
            }
            else
            {
                mensajeRetorno.codigoMensaje = "E";
                mensajeRetorno.textMensaje = "No se pudo modificar la marca";
            }

            return mensajeRetorno;
        }

        public Mensaje EliminarMarca(string codigo)
        {
            Mensaje mensajeRetorno = new Mensaje();

            // ListarModelos
           
            dao.Eliminar(dao.Obtener(Int32.Parse(codigo)));

            Marca marcaObtenida = dao.Obtener(Int32.Parse(codigo));

            if (marcaObtenida == null)
            {
                mensajeRetorno.codigoMensaje = "S";
                mensajeRetorno.textMensaje = "Marca eliminada exitosamente";
            }
            else
            {
                mensajeRetorno.codigoMensaje = "E";
                mensajeRetorno.textMensaje = "No se pudo eliminar la marca";
            }

            return mensajeRetorno;
        }

        public List<Marca> ListarMarca()
        {
            return dao.ListarTodos().ToList<Marca>();
        }
    }
}

Procedemos a editar el archivo “IMarcas.cs” con el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Web;
using GestionServices.Dominio;

namespace GestionServices
{
    [ServiceContract]
    public interface IMarcas
    {
        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "Marcas", ResponseFormat = WebMessageFormat.Json)]
        Mensaje CrearMarca(Marca marca);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Marcas/{codigo}", ResponseFormat = WebMessageFormat.Json)]
        Marca ObtenerMarca(string codigo);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Marcas/?nombre={nombre}", ResponseFormat = WebMessageFormat.Json)]
        Marca ObtenerXNombre(string nombre);

        [OperationContract]
        [WebInvoke(Method = "PUT", UriTemplate = "Marcas", ResponseFormat = WebMessageFormat.Json)]
        Mensaje ModificarMarca(Marca marca);

        [OperationContract]
        [WebInvoke(Method = "DELETE", UriTemplate = "Marcas/{codigo}", ResponseFormat = WebMessageFormat.Json)]
        Mensaje EliminarMarca(string codigo);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Marcas", ResponseFormat = WebMessageFormat.Json)]
        List<Marca> ListarMarca();
    }
}

Ahora, dar clic derecho sobre el archivo “Marcas.svc” y escoger la opción “Ver Marcado”, y adicionar la última línea que se muestra en la siguiente imagen (Marcada en amarillo):

<%@ ServiceHost
Language="C#"
Debug="true"
Service="GestionServices.Marcas"
CodeBehind="Marcas.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
%>

Luego Insertar algunos registros en nuestra tabla marcas para poder probar el listado de marcas
Posteriormente sobre el mismo archivo “Marcas.svc” dar clic derecho y escoger la opción “Ver en el Explorador”.

En la pantalla que nos aparecerá, agregar al final de la url lo siguiente: /Marcas/1
Luego probar con: /Marcas


Se puede verificar la respuesta generada están en formato JSON. 

Espero que este tema les haya sido de utilidad..

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio