Consideraciones a tomar en cuenta
al momento de desarrollar un servicio REST:
Vamos hacer un ejemplo que se encarga
una entida CITA, que cumplirá con todos los mantenimientos, para ello creamos
un wcf de Nombre: CitaService; por default se generan el archivo CitaService.svc y el ICitaService.cs
Primer
caso, posicionarse sobre el archivo wcf (CitaService.svc) y vamos a indicarle
el modelo de servicio que va a tener nuestro WCF configurándolo de la siguiente
manera
Al momento de crear el servicio, darle click derecho (1) y seleccionar la opción Ver marcado (2).
Cuando se abra el editor, se tiene que agregar el siguiente código(3):
Factory= "System.ServiceModel.Activation.WebServiceHostFactory"
(*) WebServiceHost es un tipo derivado de ServiceHost, lo que simplifica los escenarios de auto alojamiento de extremos RESTful.
Esta optimización evita el código repetitivo de agregar WebHttpBinding y WebHttpBehavior manualmente. La clase WebServiceHost automáticamente crea el extremo final y configura con el WebHttpBinding y WebHttpBehavior.
Controlador de excepciones:
En la capa de servicios, declara el webexception que va a
utilizar como regla de negocio.
El código seria el siguiente
Apoyado en una clase
personalizada ERROR, para poder obtener el error serializado y desde la capa de
presentación, en la clase controladora específicamente, poder capturar y
mostrar lo que mandamos:
throw new WebFaultException<[ClaseError]>(
new [ClaseError] ()
{
IsValid
= false,
txtMensaje = "Mensaje
de Error
PkReference = 0
}, HttpStatusCode.InternalServerError);
Luego, en la vista controladora
ponemos el método en un try catch(webexception) y hacemos lo siguiente:
catch
(WebException wex)
{
if
(wex.Response != null)
{
using
(var errorResponse = (HttpWebResponse)wex.Response)
{
using (var reader = new StreamReader(errorResponse.GetResponseStream()))
{
MensajeRetornoWS error = JSONDeserialize<MensajeRetornoWS>(reader.ReadToEnd());
//string error = reader.ReadToEnd();
ModelState.AddModelError("",
error.txtMensaje);
}
}
}
}
No hay comentarios:
Publicar un comentario