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
O Service Broker usa três tipos de mensagem do sistema para comunicar informações de status e erro do Service Broker.
Lidar com mensagens do sistema
A maioria das mensagens em uma conversa do Service Broker são as mensagens definidas pelo aplicativo usadas para se comunicar entre serviços. Cada mensagem deve estar em conformidade com um formato de tipo de mensagem que foi definido por uma CREATE MESSAGE TYPE instrução. O conjunto de tipos de mensagem permitidos para uma conversa é definido pelo contrato especificado na BEGIN DIALOG CONVERSATION instrução.
Além dos tipos de mensagem definidos pelo aplicativo especificados no contrato, qualquer conversa também pode receber mensagens que usam um dos três tipos de mensagem definidos pelo sistema. O Service Broker usa esses tipos de mensagem para relatar erros e o status das caixas de diálogo. Cada aplicativo deve conter lógica para lidar com mensagens de erro e mensagens de diálogo de fim. Se o aplicativo define um temporizador de conversa em uma conversa de diálogo, o aplicativo deve conter lógica para lidar com mensagens de Timer de diálogo. O Service Broker fornece esses tipos de mensagem para todos os serviços, independentemente de eles aparecerem no contrato do serviço ou não. Para obter mais informações, consulte Manipular mensagens de erro do Service Broker.
Mensagens de erro
Quando um serviço remoto termina uma caixa de diálogo com um erro ou o agente local deteta um erro irrecuperável em uma caixa de diálogo, o agente local cria uma mensagem de erro. As mensagens de erro são do tipo http://schemas.microsoft.com/SQL/ServiceBroker/Errorde mensagem . As mensagens de erro são validadas como XML bem formado.
O documento XML contido em uma mensagem de erro usa o namespace http://schemas.microsoft.com/SQL/ServiceBroker. O elemento raiz do documento tem o nome local Error, e contém um elemento chamado Code e um elemento chamado Message. O elemento Code contém um valor inteiro. O elemento Message contém o texto legível por humanos da mensagem.
Por exemplo, uma mensagem de erro gerada por um serviço que processa relatórios de despesas pode conter o seguinte XML (reformatado para legibilidade):
<?xml version="1.0"?>
<Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker">
<Code>12</Code>
<Description>
Unknown cost center "127-1000". Please check the cost center list
and resubmit the report.
</Description>
</Error>
Uma operação de recebimento recebe uma mensagem de erro antes de qualquer mensagem para essa caixa de diálogo diferente de uma mensagem de temporizador de diálogo. Isso ocorre independentemente da ordem em que a mensagem de erro chegou na fila. Quando uma fila tem uma mensagem de temporizador de diálogo e uma mensagem de erro, uma operação de recebimento recebe a mensagem de temporizador de diálogo antes da mensagem de erro.
Quando uma mensagem de erro chega para uma caixa de diálogo, o agente gera um erro se um aplicativo tenta enviar uma mensagem nessa caixa de diálogo. No entanto, um aplicativo pode receber quaisquer mensagens restantes para a caixa de diálogo, mesmo depois de receber uma mensagem de erro.
Terminar mensagens de diálogo
Quando um aplicativo termina uma caixa de diálogo sem especificar um erro, o agente local envia uma mensagem de diálogo de término para o agente remoto. As mensagens End Dialog são do tipo https://schemas.microsoft.com/SQL/ServiceBroker/EndDialogde mensagem .
As mensagens da Caixa de diálogo de fim são mensagens vazias. Uma operação de recebimento recebe uma mensagem End Dialog na ordem em que a mensagem chegou na fila.
Mensagens de temporizador de diálogo
As mensagens do temporizador de diálogo indicam que o temporizador de conversação numa caixa de diálogo expirou. Estas mensagens são do tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimerde mensagem . Um temporizador de conversação é específico para um lado da conversa; O Service Broker nunca envia uma mensagem de temporizador de diálogo para o outro lado da conversa.
As mensagens do temporizador de diálogo são mensagens vazias. Uma operação de recebimento recebe a mensagem do temporizador de diálogo antes de qualquer outra mensagem para essa caixa de diálogo, independentemente da ordem em que a mensagem de tempo limite chegou à fila.
Conteúdo relacionado
- Como recuperar informações de uma mensagem de erro do Service Broker (Transact SQL)
- INICIAR TEMPORIZADOR DE CONVERSAÇÃO (Transact-SQL)
- INICIAR CONVERSA NA CAIXA DE DIÁLOGO (Transact-SQL)
- CRIAR CONTRATO (Transact-SQL)
- CRIAR TIPO DE MENSAGEM (Transact-SQL)
- FIM CONVERSA (Transact-SQL)
- RECEBER (Transact-SQL)