Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Managed Instance
Os aplicativos do Service Broker devem lidar com dois tipos de mensagens de erro recebidas de conversas: mensagens de erro criadas por um aplicativo que usa o Service Broker e mensagens do sistema criadas pelo Service Broker.
Relatar condições de erro do aplicativo
Os aplicativos do Service Broker geralmente são sistemas que consistem em código executado de forma assíncrona em computadores diferentes. As partes do aplicativo se comunicam entre si usando mensagens enviadas em conversas do Service Broker. A parte do aplicativo em um lado de uma conversa do Service Broker pode relatar erros do aplicativo para o outro lado enviando mensagens de erro. A parte recetora do aplicativo deve ter código para detetar uma mensagem de erro e manipular corretamente a condição de erro.
Os aplicativos do Service Broker podem comunicar erros usando tipos de mensagem definidos pelo sistema ou pelo aplicativo.
Mensagens de erro definidas pelo sistema
Use a WITH ERROR cláusula da instrução para relatar erros de aplicativo que são graves o suficiente para exigir o encerramento da END CONVERSATION conversa. Por exemplo:
END CONVERSATION @ConversationHandle
WITH ERROR = 1234 DESCRIPTION = 'The account specified in the invoice does not exist, verify the account number.';
A END CONVERSATION WITH ERROR declaração:
Gera uma mensagem de erro do sistema do Service Broker e a envia para o lado remoto da conversa. As mensagens de erro usam o tipo de mensagem definido
https://schemas.microsoft.com/SQL/ServiceBroker/Errorpelo sistema.Termina o lado local da conversa.
A parte do aplicativo que recebe a Error mensagem deve fazer qualquer limpeza necessária e encerrar seu lado da conversa.
Um aplicativo pode encerrar uma conversa ativa com um erro a qualquer momento. No entanto, se o lado remoto da conversa já tiver terminado, o Service Broker não enviará a mensagem de erro para o lado remoto. Em vez disso, o Service Broker apenas encerra o lado local da conversa e remove todas as mensagens da conversa da fila local.
Mensagens de erro definidas pelo aplicativo
Você pode usar mensagens de erro definidas pelo aplicativo para relatar erros que não são graves o suficiente para encerrar uma conversa. O designer de aplicativo pode especificar o seguinte:
- Um ou mais tipos de mensagem que são usados para comunicar esses erros de aplicativo.
- A lógica para lidar com esses tipos de mensagem.
A parte do aplicativo que encontra a condição de erro pode fazer o seguinte:
- Execute qualquer limpeza necessária para o lado local da conversa.
- Crie uma mensagem usando o tipo de mensagem definido pelo aplicativo e envie-a na conversa.
A parte remota do aplicativo que recebe a mensagem de erro deve ter código para reconhecer a mensagem de erro e executar qualquer limpeza necessária em seu lado da conexão.
Manipular mensagens de erro
O código do aplicativo que recebe mensagens de conversas do Service Broker deve ter lógica para processar mensagens de erro recebidas da conversa. O código deve detetar e lidar com o seguinte:
Mensagens de erro geradas por um aplicativo que usa um tipo de mensagem de erro definido pelo aplicativo.
Mensagens de erro geradas por um aplicativo que usa a
WITH ERRORcláusula daEND CONVERSATIONinstrução. Essas mensagens de erro usam ohttps://schemas.microsoft.com/SQL/ServiceBroker/Errortipo de mensagem e têm um número positivo noCodeelemento .Mensagens de erro geradas pelo Service Broker. Essas mensagens de erro usam o
https://schemas.microsoft.com/SQL/ServiceBroker/Errortipo de mensagem e têm um número negativo no elemento Code . O Service Broker cria uma mensagem de erro quando um erro impossibilita o Service Broker de continuar a conversa. Por exemplo, o Service Broker não pode localizar o serviço de destino porque o serviço não existe na instância atual e não há entrada para o serviço na tabela de roteamento. Nessa situação, o Service Broker cria umaErrormensagem para a conversa.
O conjunto de resultados retornado pela RECEIVE instrução contém uma message_type_name coluna. O código que recebe mensagens do Service Broker normalmente usa message_type_name para rotear cada mensagem para o código que processa o tipo de mensagem associado.
A lógica exata que um programa segue para lidar com o erro depende do aplicativo. Um exemplo é um programa que usa retenção de mensagens e requer transações de compensação quando a tarefa falha. Quando um erro é recebido, o programa consulta a fila para as mensagens que já foram processadas, executa transações de compensação e, em seguida, termina a conversa. Por outro lado, se o programa só tem de registar que ocorreu um erro, o programa regista o erro numa tabela de registo e termina a conversa.
O Code elemento da mensagem contém o código de https://schemas.microsoft.com/SQL/ServiceBroker/Error erro.
Error As mensagens criadas por um aplicativo que usa END CONVERSATION WITH ERROR têm um valor positivo para o código de erro.
Error mensagens geradas pelo Service Broker contêm valores negativos para o código de erro. O Code valor nas mensagens geradas pelo Service Broker é apenas o valor negado do erro que causou a Error mensagem. Por exemplo, quando ocorre um erro de validação XML (código de erro 9615), o Mecanismo de Banco de Dados cria uma Error mensagem que tem um Code elemento que contém o valor -9615.
Uma vez que um aplicativo recebe uma Error mensagem, o programa não pode mais enviar mensagens sobre essa conversa. O aplicativo lida com o erro e, em seguida, termina seu lado da conversa. Se um aplicativo receber um tipo de mensagem de erro definido pelo aplicativo, a conversa ainda estará disponível, a menos que a parte remota do aplicativo também seja executada END CONVERSATION.
As rotinas de tratamento de erros devem ser codificadas de forma a evitar mensagens suspeitas. Para obter mais informações, consulte Manipular mensagens suspeitas.