Ejemplo n.º 1
0
        public void ProvideFault(Exception error, MessageVersion version, ref Message msg)
        {
            if (error is FaultException <ErrorServicioRespuesta> )
            {
                return;
            }

            ErrorServicioRespuesta faultDetail = ErrorBuilder.ConstruirError(error);

            if (faultDetail == null)
            {
                return;
            }

            Type faultType =
                typeof(FaultException <>).MakeGenericType(faultDetail.GetType());

            var       faultReason = new FaultReason(faultDetail.Mensaje);
            FaultCode faultCode   = FaultCode.CreateReceiverFaultCode(new FaultCode(faultDetail.Codigo));

            var faultException =
                (FaultException)Activator.CreateInstance(faultType, faultDetail, faultReason, faultCode);

            MessageFault faultMessage = faultException.CreateMessageFault();

            msg = Message.CreateMessage(version, faultMessage, faultException.Action);
        }
Ejemplo n.º 2
0
        public void AfterReceiveReply(ref Message reply, object correlationState)
        {
            if (!reply.IsFault || !_enabled)
            {
                return;
            }

            MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue);
            Message       copy   = buffer.CreateMessage();

            reply = buffer.CreateMessage();

            ErrorServicioRespuesta exception = RecuperarFaultException(copy);

            if (exception == null)
            {
                return;
            }

            switch (exception.Tipo)
            {
            case TipoErrorServicio.ErrorValidacion:
                throw new ExcepcionValidacion(exception.Mensaje);

            case TipoErrorServicio.ErrorNegocio:
                throw new ExcepcionReglaNegocio(exception.Codigo, exception.Mensaje);

            default:
                throw new ExcepcionServicio(
                          "La respuesta no pudo ser atendida por el servicio. Por favor intente más tarde.");
            }
        }
Ejemplo n.º 3
0
        public static ErrorServicioRespuesta ConstruirError(Exception error)
        {
            var faultDetail = new ErrorServicioRespuesta {
                Codigo = "0000"
            };
            Type tipoError = error.GetType();

            if (tipoError == typeof(SqlException))
            {
                faultDetail.Mensaje = "Ocurrió un error al conectarse a la base de datos.";
                faultDetail.Tipo    = TipoErrorServicio.ErrorBaseDatos;
            }
            else if (tipoError == typeof(ExcepcionActualizarRegistro))
            {
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo    = TipoErrorServicio.ErrorActualizacionBaseDatos;
            }
            else if (tipoError == typeof(ExcepcionEliminarRegistro))
            {
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo    = TipoErrorServicio.ErrorEliminacionBaseDatos;
            }
            else if (tipoError == typeof(TimeoutException))
            {
                faultDetail.Mensaje = "Ocurrió un error de tiempo de espera.";
                faultDetail.Tipo    = TipoErrorServicio.ErrorTiempoConexion;
            }
            else if (tipoError == typeof(CommunicationException))
            {
                faultDetail.Mensaje = "Ocurrió un error al comunicarse con el servicio.";
                faultDetail.Tipo    = TipoErrorServicio.ErrorComunicacion;
            }
            else if (tipoError == typeof(EndpointNotFoundException))
            {
                faultDetail.Mensaje = "No se encuentra el servicio especificado.";
                faultDetail.Tipo    = TipoErrorServicio.ErrorComunicacion;
            }
            else if (tipoError == typeof(ExcepcionReglaNegocio))
            {
                faultDetail.Codigo  = ((ExcepcionReglaNegocio)error).Codigo;
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo    = TipoErrorServicio.ErrorNegocio;
            }
            else if (tipoError == typeof(ExcepcionValidacion))
            {
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo    = TipoErrorServicio.ErrorValidacion;
            }
            else
            {
                faultDetail.Mensaje = "Ocurrió un error inesperado en el servicio.";
                faultDetail.Tipo    = TipoErrorServicio.ErrorNoManejado;
            }

            return(faultDetail);
        }
Ejemplo n.º 4
0
        public static ErrorServicioRespuesta ConstruirError(Exception error)
        {
            var faultDetail = new ErrorServicioRespuesta {Codigo = "0000"};
            Type tipoError = error.GetType();

            if (tipoError == typeof (SqlException))
            {
                faultDetail.Mensaje = "Ocurrió un error al conectarse a la base de datos.";
                faultDetail.Tipo = TipoErrorServicio.ErrorBaseDatos;
            }
            else if (tipoError == typeof (ExcepcionActualizarRegistro))
            {
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo = TipoErrorServicio.ErrorActualizacionBaseDatos;
            }
            else if (tipoError == typeof (ExcepcionEliminarRegistro))
            {
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo = TipoErrorServicio.ErrorEliminacionBaseDatos;
            }
            else if (tipoError == typeof (TimeoutException))
            {
                faultDetail.Mensaje = "Ocurrió un error de tiempo de espera.";
                faultDetail.Tipo = TipoErrorServicio.ErrorTiempoConexion;
            }
            else if (tipoError == typeof (CommunicationException))
            {
                faultDetail.Mensaje = "Ocurrió un error al comunicarse con el servicio.";
                faultDetail.Tipo = TipoErrorServicio.ErrorComunicacion;
            }
            else if (tipoError == typeof (EndpointNotFoundException))
            {
                faultDetail.Mensaje = "No se encuentra el servicio especificado.";
                faultDetail.Tipo = TipoErrorServicio.ErrorComunicacion;
            }
            else if (tipoError == typeof (ExcepcionReglaNegocio))
            {
                faultDetail.Codigo = ((ExcepcionReglaNegocio) error).Codigo;
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo = TipoErrorServicio.ErrorNegocio;
            }
            else if (tipoError == typeof(ExcepcionValidacion))
            {
                faultDetail.Mensaje = error.Message;
                faultDetail.Tipo = TipoErrorServicio.ErrorValidacion;
            }
            else
            {
                faultDetail.Mensaje = "Ocurrió un error inesperado en el servicio.";
                faultDetail.Tipo = TipoErrorServicio.ErrorNoManejado;
            }

            return faultDetail;
        }