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); }
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."); } }
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); }
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; }