Exportar (0) Imprimir
Expandir todo

Apéndice: Excepciones de mensajería

Actualizado: abril de 2014

En esta sección se enumeran las distintas excepciones que genera la API de mensajes de Windows Azure Service Bus. Dado que esta referencia está sujeta a cambios, le recomendamos comprobar de forma regular si hay actualizaciones.

Categorías de excepción

Las API de mensajes generan excepciones que pueden corresponder a las siguientes categorías, junto con la acción asociada que se puede tomar para intentar solucionarlas:

  1. Error de código de usuario (ArgumentException, InvalidOperationException, OperationCanceledException, SerializationException). Acción general: intente corregir el código antes de continuar.

  2. Error de instalación/configuración (MessagingEntityNotFoundException, UnauthorizedAccessException. Acción general: revise la configuración y modifíquela si es necesario.

  3. Excepciones transitorias (MessagingException, ServerBusyException, MessagingCommunicationException). Acción general: vuelva a intentar la operación o notifique a los usuarios.

  4. Otras excepciones (TransactionException, TimeoutException, MessageLockLostException/SessionLockLostException). Acción general: por lo general, no administra estas excepciones para realizar limpiezas o anulaciones. Es posible que se usen para seguimiento.

Tipos de excepciones

En la tabla siguiente se enumeran los tipos de excepciones de mensajes y sus causas, junto con las acciones sugeridas que debe realizar.

 

Tipo de excepción Descripción/Causa/Ejemplos Acción sugerida Nota sobre reintento automático/inmediato

TimeoutException

El servidor no respondió a la operación solicitada dentro del tiempo especificado que controla OperationTimeout. Es posible que el servidor haya completado la operación solicitada. Esto puede suceder debido a retrasos de red o de otra infraestructura.

Compruebe el estado del sistema en cuanto a coherencia y vuelva a intentarlo si es necesario.

El reintento podría resultar útil en algunos casos. Agregue lógica de reintento al código.

InvalidOperationException

La operación que solicita el usuario no está permitida en el servidor o servicio. Para obtener información detallada, vea el mensaje de excepción. Por ejemplo, Complete generará esta excepción si el mensaje se recibió en el modo ReceiveAndDelete.

Compruebe el código y la documentación. Asegúrese de que la operación solicitada es válida.

El reintento no será útil en este caso.

OperationCanceledException

Se intentó invocar una operación en un objeto que ya se ha cerrado, anulado o desechado. En contadas ocasiones, la transacción de ambiente ya se ha desechado.

Compruebe el código y asegúrese de que no invoca operaciones en un objeto desechado.

El reintento no será útil en este caso.

UnauthorizedAccessException

El objeto TokenProvider no pudo obtener un token, el token no es válido o no contiene las notificaciones requeridas para realizar la operación.

Asegúrese de que el proveedor de tokens se haya creado con los valores correctos. Compruebe la configuración del servicio de Control de acceso.

El reintento podría resultar útil en algunos casos. Agregue lógica de reintento al código.

ArgumentException

ArgumentNullException

ArgumentOutOfRangeException

  • Uno o varios argumentos proporcionados al método no son válidos.

  • El URI proporcionado a NamespaceManager o Create contiene segmentos de ruta de acceso.

  • El esquema de URI proporcionado a NamespaceManager o Create no es válido.

  • El valor de propiedad es superior a 32 KB.

Compruebe el código de llamada y asegúrese de que los argumentos son correctos.

El reintento no será útil en este caso.

MessagingEntityNotFoundException

La entidad asociada a la operación no existe o se ha eliminado.

Cerciórese de que la entidad existe.

El reintento no será útil en este caso.

MessageNotFoundException

Se intentó recibir un mensaje con una secuencia numérica concreta. El mensaje no se encuentra.

Asegúrese de que el mensaje no se haya recibido. Compruebe la cola de mensajes con problemas de entrega para ver si aparece el mensaje.

El reintento no será útil en este caso.

MessagingCommunicationException

El cliente no puede establecer una conexión con Service Bus.

Asegúrese de que el nombre de host proporcionado es correcto y que se puede acceder al host.

El reintento podría ser útil si existen problemas de conectividad intermitente.

ServerBusyException

El servicio no puede procesar la solicitud en este momento.

El cliente puede esperar durante un tiempo y volver a intentar la operación.

El cliente puede reintentar tras un determinado intervalo. Si el reintento genera otra excepción, compruebe el comportamiento de reintento de esa excepción.

MessageLockLostException

No se encuentra el token de bloqueo asociado al mensaje o ha expirado.

Elimine el mensaje.

El reintento no será útil en este caso.

SessionLockLostException

Se perdió el bloqueo asociado a esta sesión.

Anule el objeto MessageSession.

El reintento no será útil en este caso.

MessagingException

Excepción de mensajes genérica que puede generarse en los siguientes casos:

  • Se intentó crear un QueueClient mediante un nombre o una ruta e acceso perteneciente a otro tipo de entidad (por ejemplo, un tema).

  • Se intentó enviar un mensaje superior a 256 KB.

  • El servidor o servicio encontró un error al procesar la solicitud. Para obtener información detallada, vea el mensaje de excepción. Por lo general, se trata de una excepción transitoria.

  • Compruebe el código y asegúrese de que solo se usen objetos serializables para el cuerpo del mensaje (o use un serializador personalizado).

  • Compruebe la documentación para ver los tipos de valor admitidos de las propiedades o use solamente los tipos admitidos.

  • Compruebe la propiedad IsTransient. Si tiene el valor true, puede volver a intentar la operación.

El comportamiento de reintento es indefinido y quizá no resulte útil.

MessagingEntityAlreadyExistsException

Se intentó crear una entidad con un nombre que otra entidad ya usa en ese espacio de nombres de servicio.

Elimine la entidad existente o elija otro nombre para la entidad que se debe crear.

El reintento no será útil en este caso.

QuotaExceededException

La entidad de mensajería alcanzó su tamaño máximo permitido.

Cree espacio en la entidad. Para ello, reciba los mensajes de la entidad o sus subcolas.

Es posible que un reintento ayude si mientras tanto se han quitado mensajes.

RuleActionException

Service Bus devuelve esta excepción si intenta crear una acción de regla no válida. Service Bus adjunta esta excepción a un mensaje con problemas de entrega si se produce un error durante el procesamiento de la acción de regla para ese mensaje.

Compruebe la acción de regla para asegurarse de que sea correcta.

El reintento no será útil en este caso.

FilterException

Service Bus devuelve esta excepción si intenta crear un filtro no válido. Service Bus adjunta esta excepción a un mensaje con problemas de entrega si se produce un error durante el procesamiento del filtro para ese mensaje.

Compruebe el filtro para asegurarse de que sea correcto.

El reintento no será útil en este caso.

SessionCannotBeLockedException

Se intentó aceptar una sesión con un identificador de sesión concreto, pero otro cliente ha bloqueado la sesión.

Asegúrese de que los otros clientes desbloqueen la sesión.

Es posible que un reintento ayude si mientras tanto la sesión se ha liberado.

TransactionSizeExceededException

Hay demasiadas operaciones que forman parte de la transacción.

Reduzca el número de operaciones que forman parte de esta transacción.

El reintento no será útil en este caso.

MessagingEntityDisabledException

Solicitud de operación de tiempo de ejecución en una entidad deshabilitada.

Active la entidad.

Es posible que un reintento ayude si mientras tanto la entidad se ha activado.

NoMatchingSubscriptionException

Service Bus devuelve esta excepción si envía un mensaje a un tema con el filtrado previo habilitado y no coincide ninguno de los filtros.

Asegúrese de que coincida al menos un filtro.

El reintento no será útil en este caso.

MessageSizeExceededException

La carga de un mensaje supera el límite de 256 KB. Tenga en cuenta que el límite de 256 KB es el tamaño total del mensaje, que puede incluir propiedades del sistema y sobrecarga de .NET.

Reduzca el tamaño de la carga del mensaje e intente de nuevo la operación.

El reintento no será útil en este caso.

TransactionException

La transacción de ambiente (Current) no es válida. Es posible que se haya completado o anulado. La excepción interna puede proporcionar información adicional.

El reintento no será útil en este caso.

TransactionInDoubtException

Se intentó una operación en una transacción que es dudosa o se intentó confirmar la transacción y se convierte en dudosa.

La aplicación debe gestionar esta excepción (como un caso especial), dado que es posible que ya se haya confirmado la transacción.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft