Apêndice: Exceções do sistema de mensagens
Essa seção lista as várias exceções geradas pela API do sistema de mensagens do Service Bus. Essa referência está sujeita a mudanças, então verifique se há atualizações.
Categorias de exceções
A API do sistema de mensagens gera exceções que podem recair nas seguintes categorias com a ação associada que pode ser tomada para tentar corrigi-las:
-
Código de erro do usuário (ArgumentException, InvalidOperationException, OperationCanceledException, SerializationException). Ação geral: tente corrigir o código antes de prosseguir.
-
Erro de definição/configuração (MessagingEntityNotFoundException, UnauthorizedAccessException. Ação geral: revise sua configuração e altere-a, se necessário.
-
Exceções temporárias (MessagingException, ServerBusyException, MessagingCommunicationException). Ação geral: tente a operação novamente ou notifique os usuários.
-
Outras exceções (TransactionException, TimeoutException, MessageLockLostException/SessionLockLostException). Ação geral: geralmente, você não trata essas exceções para realizar limpeza ou anulações. Elas podem ser usadas para rastreamento.
Tipos de exceção
A tabela a seguir lista os tipos de exceção do sistema de mensagens, bem como suas causas, e cita a ação sugerida que pode ser tomada.
| Tipo de exceção | Descrição/Causa/Exemplos | Ação sugerida | Observação sobre nova tentativa automática/imediata |
|---|---|---|---|
|
O servidor não respondeu à operação solicitada dentro do tempo especificado que é controlado por OperationTimeout. O servidor pode ter concluído a operação solicitada. Isso pode ocorrer devido a atrasos na rede ou de outros elementos da infraestrutura. |
Verifique a consistência do estado do sistema e tente novamente, se necessário. |
Uma nova tentativa pode ajudar em alguns casos; adicione lógica de nova tentativa ao código. |
|
|
A operação solicitada pelo usuário não é permitida dentro do servidor ou serviço. Consulte a mensagem de exceção para obter detalhes. Por exemplo, o Complete irá gerar essa exceção se a mensagem tiver sido recebida no modo ReceiveAndDelete. |
Verifique o código e a documentação. Assegure-se de que a operação solicitada seja válida. |
A nova tentativa não ajudará. |
|
|
É feita uma tentativa de invocar uma operação em um objeto que já foi fechado, anulado ou descartado. Em casos raros, a transação do ambiente já foi descartada. |
Verifique o código e assegure-se de que ele não invoque operações em um objeto descartado. |
A nova tentativa não ajudará. |
|
|
O TokenProvider não pôde obter um token, o token é inválido ou não contém as declarações necessárias para realizar a operação. |
Assegure-se de que o provedor de tokens foi criado com os valores corretos. Verifique a configuração do serviço Access Control. |
Uma nova tentativa pode ajudar em alguns casos; adicione lógica de nova tentativa ao código. |
|
|
Verifique o código chamador e assegure-se de que os argumentos sejam corretos. |
A nova tentativa não ajudará. |
|
|
A entidade associada à operação não existe ou foi excluída. |
Assegure-se de que a entidade existe. |
A nova tentativa não ajudará. |
|
|
Tentativa de receber uma mensagem com um determinado número de sequência. Essa mensagem não foi encontrada. |
Verifique se a mensagem já foi recebida anteriormente. Verifique a fila de mensagens mortas para confirmar se a mensagem não foi definida como uma mensagem morta. |
A nova tentativa não ajudará. |
|
|
O cliente não pode estabelecer uma conexão com o Service Bus. |
Assegure-se de que o nome de host fornecido esteja correto e que o host possa ser alcançado. |
A nova tentativa poderá ajudar se houver problemas intermitentes de conectividade. |
|
|
O serviço não pode processar a solicitação no momento. |
O cliente pode esperar por um período de tempo e, a seguir, tentar a operação novamente. |
O cliente pode tentar novamente depois de um certo intervalo. Se uma nova tentativa resultar em uma exceção diferente, verifique o comportamento de nova tentativa de tal exceção. |
|
|
O token de bloqueio associado à mensagem expirou ou não foi encontrado. |
Descarte a mensagem. |
A nova tentativa não ajudará. |
|
|
O bloqueio associado a esta sessão foi perdido. |
Anule o objeto MessageSession. |
A nova tentativa não ajudará. |
|
|
Exceção genérica do sistema de mensagens que pode ser lançada nos seguintes casos:
|
|
O comportamento da nova tentativa é indefinido e pode não ajudar. |
|
|
Tentativa de criar uma entidade com um nome que já está em uso por outra entidade neste namespace de serviço. |
Exclua a entidade existente ou escolha um nome diferente para a entidade a ser criada. |
A nova tentativa não ajudará. |
|
|
A entidade do sistema de mensagens atingiu o seu tamanho máximo permitido. |
Crie espaço na entidade recebendo mensagens da entidade ou das suas subfilas. |
Uma nova tentativa pode ajudar se, entretanto, as mensagens tiverem sido removidas. |
|
|
O Service Bus retorna essa exceção caso você tente criar uma ação de regra inválida. O Service Bus anexa essa exceção a uma mensagem morta caso ocorra um erro durante o processamento da ação de regra para essa mensagem. |
Verifique se a ação de regra está correta. |
A nova tentativa não ajudará. |
|
|
O Service Bus retorna essa exceção caso você tente criar um filtro inválido. O Service Bus anexa essa exceção a uma mensagem morta caso ocorra um erro durante o processamento do filtro para essa mensagem. |
Verifique se o filtro está correto. |
A nova tentativa não ajudará. |
|
|
Tentativa de aceitar uma sessão com uma ID de sessão específica, mas a sessão está bloqueada por outro cliente no momento. |
Verifique se a sessão está desbloqueada por outros clientes. |
Uma nova tentativa pode ajudar se, entretanto, a sessão tiver sido liberada. |
|
|
Muitas operações fazem parte da transação. |
Reduza o número de operações que fazem parte dessa transação. |
A nova tentativa não ajudará. |
|
|
Solicitação de operação de tempo de execução em uma entidade desabilitada. |
Ative a entidade. |
Uma nova tentativa pode ajudar se, entretanto, a entidade tiver sido ativada. |
|
|
O Service Bus retorna essa exceção se o usuário envia uma mensagem para um tópico que tem pré-filtragem habilitada e não há correspondência com nenhum dos filtros. |
Verifique se pelo menos um filtro corresponde. |
A nova tentativa não ajudará. |
|
|
A transação do ambiente (Current) é inválida. Ela pode ter sido concluída ou anulada. A exceção interna pode fornecer informações adicionais. |
|
A nova tentativa não ajudará. |
|
|
Houve a tentativa de uma operação em uma transação que está em dúvida ou uma tentativa de confirmar a transação e esta ficou em dúvida. |
Seu aplicativo deverá tratar essa exceção (como um caso especial), pois a transação pode já ter sido confirmada. |
|