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..
Espero que este tema les haya sido de utilidad..
0 comentarios:
Publicar un comentario
Suscribirse a Enviar comentarios [Atom]
<< Inicio