Compartilhar via


Mensagens do sistema do Service Broker

O Service Broker usa três tipos de mensagem do sistema para comunicar informações de status e erro do Service Broker.

Controlando mensagens do sistema

A maioria das mensagens em uma conversação do Service Broker são mensagens definidas pelo aplicativo usadas para comunicação entre serviços. Cada mensagem deve seguir um formato de tipo de mensagem definido por uma instrução CREATE MESSAGE TYPE. O conjunto de tipos de mensagem permitido para uma conversação é definido pelo contrato especificado na instrução BEGIN DIALOG CONVERSATION.

Além dos tipos de mensagem definidos pelo aplicativo especificado no contrato, qualquer conversação pode também receber mensagens que usam um dos três tipos de mensagem definidos pelo sistema. Esses tipos de mensagem são usados pelo Service Broker para informar erros e o status dos diálogos. Cada aplicativo deve conter lógica para controlar mensagens de Erro e mensagens de Término de Diálogo Se um aplicativo definir um timer de conversação em um diálogo, o aplicativo deverá conter lógica para tratar mensagens de Timer de Diálogo. O Service Broker fornece esses tipos de mensagem a cada serviço, quer apareçam no contrato do serviço ou não. Para obter mais informações, consulte Tratando mensagens de erro do Service Broker.

Mensagens de erro

Quando um serviço remoto encerra um diálogo com erro ou o agente local detecta um erro irrecuperável em um diálogo, o agente local cria uma Mensagem de Erro. Mensagens de Erro são mensagens do tipo https://schemas.microsoft.com/SQL/ServiceBroker/Error. As mensagens de erro são validadas como XML bem formado.

O documento XML que é contido em uma mensagem de erro usa o namespace https://schemas.microsoft.com/SQL/ServiceBroker. O elemento raiz do documento tem o nome local Erro e contém um elemento denominado Código e um elemento denominado Mensagem. O elemento Código contém um valor inteiro. O elemento Mensagem contém o texto legível da mensagem.

Por exemplo, uma mensagem de erro gerada por um serviço que processa relatórios de despesa pode conter o seguinte XML (reformatado para legibilidade):

<?xml version="1.0"?>
<Error xmlns="https://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 esse diálogo, diferentemente de uma mensagem de timer de diálogo. Isso acontece independentemente da ordem de chegada da mensagem de erro na fila. Quando uma fila tem uma mensagem de timer de diálogo e uma mensagem de erro, uma operação de recebimento recebe a mensagem de timer de diálogo antes da mensagem de erro.

Quando uma mensagem de erro chegar para um diálogo, o agente gerará um erro se um aplicativo tentar enviar uma mensagem nesse diálogo. No entanto, um aplicativo pode receber qualquer mensagem restante para o diálogo, mesmo depois de receber uma mensagem de erro.

Quando um aplicativo termina um diálogo sem especificar um erro, o agente local envia uma mensagem de Término de Diálogo ao agente remoto. Mensagens de Término de Diálogo são mensagens do tipo https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.

Mensagens de Término de Diálogo são mensagens vazias. Uma operação de recebimento recebe uma mensagem de Término de Diálogo na ordem em que a mensagem chegou na fila.

Mensagens de timer de diálogo indicam que o timer de conversação em um diálogo expirou. Essas mensagens são mensagens do tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Um timer de conversação é específico de um lado da conversação; o Service Broker nunca envia uma mensagem de timer de diálogo para o outro lado da conversação.

Mensagens de timer de diálogo são mensagens vazias. Uma operação de recebimento recebe uma mensagem de timer de diálogo antes de qualquer outra mensagem para aquele diálogo, independentemente da ordem de chegada da mensagem de tempo limite na fila.