jueves, 8 de agosto de 2013

Tips de ayuda para desarrollo de RESTService



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