A continuacion los pasos de un pequeño validacion con REST en una aplicacion MVC
Para nuestro caso vamos a realizar la validacion de no permitir ingresar un nuevo reserva de una cancha de fulbito en el mismo dia, la misma cancha y la misma hora de inicio y fin
Primer Paso.-
Implementamos en nuestra capa Controller lo siguiente para retornar el error de en caso encontrar una reserva con los criterios inicialmente mencionados como se muestra a continuacion
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
string postdata = "{\"Codigo\":\"" + collection["Codigo"] + "\",\"Cliente\":\"" + collection["clientes"] + "\",\"Cancha\":\"" + collection["canchas"] + "\" ,\"Fecha\":\"" + collection["txtFechaInicioEmision"] + "\",\"Inicio\":\"" + collection["horaini"] + "\",\"Fin\":\"" + collection["horafin"] + "\",\"Monto\":\"" + collection["Monto"] + "\" }";
byte[] data = Encoding.UTF8.GetBytes(postdata);
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:3634/Reservas.svc/Reservas");
req.Method = "POST";
req.ContentLength = data.Length;
req.ContentType = "application/json";
var reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
HttpWebResponse res = null;
res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string reservaJson = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
Reserva1 recursoCreado = js.Deserialize<Reserva1>(reservaJson);
return RedirectToAction("Index");
}
catch (WebException e)
{
HttpWebResponse resError = (HttpWebResponse)e.Response;
StreamReader reader2 = new StreamReader(resError.GetResponseStream());
string error = reader2.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
string errorMessage = js.Deserialize<string>(error);
TempData["mensaje"] = errorMessage;
return RedirectToAction("Create");
}
return RedirectToAction("Index");
}
Segundo Paso.-
Una vez implementado vamos a nuestro servicio REST para mostrar la validacion si en caso existe la reserva con los criterios mencionados en el primer punto
public Reserva CrearReserva(Reserva reservaACrear)
{
var existe = ObtenerReserva(reservaACrear);
if (existe != null)
throw new WebFaultException<string>("Ya existe una Reserva!!!", HttpStatusCode.NotFound);
return dao.Crear(reservaACrear);
}
Como vemos hemos creado una variable (existe) que va ir a la base de datos a traves del metodo ObtenerReserva y retorna un objeto y si esto objeto es diferente de null capturaremos la exepcion y lo mostraremos en un mensaje en una nuestra vista(aspx)
<h3 style="color:Red"><%= TempData["mensaje"] %></h3>
Lecciones Aprendidas de Sistemas Distribuidos
sábado, 8 de diciembre de 2012
REST EXCEPTIONS CON MVC
A continuacion como trabajar con las exceptions de rest en MVC.
Primer Paso.-
En nuestra capa de nuestro servicio REST vamos a capturar el error de la excepcion, para nuestro caso vamos a validar que no se permita crear un nuevo recurso si en caso este ya existiera en la BD , a continuacion la linea de codigo para dicha implementacion
public Recurso CrearRecurso(Recurso recursoACrear)
{
var existe = ObtenerRecurso(recursoACrear.Codigo);
if (existe != null)
throw new WebFaultException<string>("El Recurso que intento Ingresar Ya Existe!!!", HttpStatusCode.NotFound);
return dao.Crear(recursoACrear);
}
Segundo Paso.-
En nuestro capa MVC de nuestra capa controller capturaremos la excepcion que nos devuelve el servicio, para el caso de servicio REST el tipo de excepcion es WebException como se muestra a continuacion
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
if (collection["codigo"] == null || collection["codigo"].Trim().Equals("") || collection["nombre"] == null || collection["precio"]==null)
{
TempData["mensaje"] = "Ingrese todos los datos por favor";
HttpWebRequest req1 = (HttpWebRequest)WebRequest
.Create("http://localhost:5158/Tipos.svc/Tipos");
req1.Method = "GET";
HttpWebResponse res1 = (HttpWebResponse)req1.GetResponse();
StreamReader reader1 = new StreamReader(res1.GetResponseStream());
string tipoJson = reader1.ReadToEnd();
JavaScriptSerializer js1 = new JavaScriptSerializer();
List<Tipo> tipos = js1.Deserialize<List<Tipo>>(tipoJson);
var list = new SelectList(tipos, "Codigo", "Nombre");
ViewData["tipos"] = list;
return View("Create");
}
string postdata = "{\"Codigo\":\"" + collection["Codigo"] + "\",\"Nombre\":\"" + collection["nombre"] + "\" ,\"Precio\":\"" + collection["precio"] + "\",\"Tipo\":\"" + collection["tipos"] + "\" }";
byte[] data = Encoding.UTF8.GetBytes(postdata);
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:5158/Recursos.svc/Recursos");
req.Method = "POST";
req.ContentLength = data.Length;
req.ContentType = "application/json";
var reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
HttpWebResponse res = null;
res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string recursoJson = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
Recurso recursoCreado = js.Deserialize<Recurso>(recursoJson);
return RedirectToAction("Index");
}catch (WebException e)
{
HttpWebResponse resError = (HttpWebResponse)e.Response;
StreamReader reader2 = new StreamReader(resError.GetResponseStream());
string error = reader2.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
string errorMessage = js.Deserialize<string>(error);
TempData["mensaje"] = errorMessage;
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:5158/Tipos.svc/Tipos");
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string tipoJson = reader.ReadToEnd();
JavaScriptSerializer js1 = new JavaScriptSerializer();
List<Tipo> tipos = js1.Deserialize<List<Tipo>>(tipoJson);
var list = new SelectList(tipos, "Codigo", "Nombre");
ViewData["tipos"] = list;
return View("Create");
}
}
Tercer Paso.-
Finalmente en nuestra capa vista(aspx) crearemos un etiqueta para almacenar el mensaje que obtengamos de nuestra clase controller proveniente de nuestro servicio REST como se muestra a continuacion
<h3 style="color:Red"><%= TempData["mensaje"] %></h3>
Primer Paso.-
En nuestra capa de nuestro servicio REST vamos a capturar el error de la excepcion, para nuestro caso vamos a validar que no se permita crear un nuevo recurso si en caso este ya existiera en la BD , a continuacion la linea de codigo para dicha implementacion
public Recurso CrearRecurso(Recurso recursoACrear)
{
var existe = ObtenerRecurso(recursoACrear.Codigo);
if (existe != null)
throw new WebFaultException<string>("El Recurso que intento Ingresar Ya Existe!!!", HttpStatusCode.NotFound);
return dao.Crear(recursoACrear);
}
Segundo Paso.-
En nuestro capa MVC de nuestra capa controller capturaremos la excepcion que nos devuelve el servicio, para el caso de servicio REST el tipo de excepcion es WebException como se muestra a continuacion
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
if (collection["codigo"] == null || collection["codigo"].Trim().Equals("") || collection["nombre"] == null || collection["precio"]==null)
{
TempData["mensaje"] = "Ingrese todos los datos por favor";
HttpWebRequest req1 = (HttpWebRequest)WebRequest
.Create("http://localhost:5158/Tipos.svc/Tipos");
req1.Method = "GET";
HttpWebResponse res1 = (HttpWebResponse)req1.GetResponse();
StreamReader reader1 = new StreamReader(res1.GetResponseStream());
string tipoJson = reader1.ReadToEnd();
JavaScriptSerializer js1 = new JavaScriptSerializer();
List<Tipo> tipos = js1.Deserialize<List<Tipo>>(tipoJson);
var list = new SelectList(tipos, "Codigo", "Nombre");
ViewData["tipos"] = list;
return View("Create");
}
string postdata = "{\"Codigo\":\"" + collection["Codigo"] + "\",\"Nombre\":\"" + collection["nombre"] + "\" ,\"Precio\":\"" + collection["precio"] + "\",\"Tipo\":\"" + collection["tipos"] + "\" }";
byte[] data = Encoding.UTF8.GetBytes(postdata);
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:5158/Recursos.svc/Recursos");
req.Method = "POST";
req.ContentLength = data.Length;
req.ContentType = "application/json";
var reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
HttpWebResponse res = null;
res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string recursoJson = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
Recurso recursoCreado = js.Deserialize<Recurso>(recursoJson);
return RedirectToAction("Index");
}catch (WebException e)
{
HttpWebResponse resError = (HttpWebResponse)e.Response;
StreamReader reader2 = new StreamReader(resError.GetResponseStream());
string error = reader2.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
string errorMessage = js.Deserialize<string>(error);
TempData["mensaje"] = errorMessage;
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:5158/Tipos.svc/Tipos");
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string tipoJson = reader.ReadToEnd();
JavaScriptSerializer js1 = new JavaScriptSerializer();
List<Tipo> tipos = js1.Deserialize<List<Tipo>>(tipoJson);
var list = new SelectList(tipos, "Codigo", "Nombre");
ViewData["tipos"] = list;
return View("Create");
}
}
Tercer Paso.-
Finalmente en nuestra capa vista(aspx) crearemos un etiqueta para almacenar el mensaje que obtengamos de nuestra clase controller proveniente de nuestro servicio REST como se muestra a continuacion
<h3 style="color:Red"><%= TempData["mensaje"] %></h3>
jueves, 6 de diciembre de 2012
Cargar un ComboBox con REST en la capa MVC
Para poder llenar un combo box con REST tenemos que realizar basicamente lo siguiente
- En nuestra clase controller realizar la implementacion de un listado con REST y almacenarlo en una variable de tipo list como se muestra en la imagen siguiente
- Asi mismo importar las librerias para poder trabajar con REST en la capa controller del MVC
- Finalmente en nuestra capa vista(aspx) llenamos el valor del combo obtenido de nuestra capa controller como se muestra en la imagen siguiente.
miércoles, 5 de diciembre de 2012
Implementando Servicios SOAP con MVC
¿Como implementar un servicio SOAP con MVC?
¿Como se hace?
¿Cuales son los pasos a seguir ?
Son muchas de las preguntas que me hice al realizar esto por primera vez, pero realizarlo no es muy complejo aqui les dejo los pasos necesarios para esto.
- Primero implementamos nuestro servicio SOAP , para mi caso fue (RegistroCliente) como se muestra en la imagen siguiente
- Seguidamente en nuestro proyecto MVC nos ubicamos en la seccion Services References y hacemos clic derecho sobre la misma y seleccionamos add Service Reference como se muestra en la imagen siguiente
- Despues de ello se mostrara nuestro servicio SOAP en nuestra capa MVC como se muestra en la imagen siguiente
- Seguidamente en nuestra capa vista modificaremos la siguiente linea dado que ahora haremos referencia a nuestro servicio SOAP. <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<ReservaCancha.RegistroWS.Clientes>>" %>
- Finalmente en nuestra clase controler para este caso la clase Cliente realizaremos la implementacion de nuestro listado utilizando SOAP en la capa MVC y realizando la referencia del mismo como se muestra en la imagen siguiente
Suscribirse a:
Comentarios (Atom)






