Messaggi di sistema broker

Si applica a:SQL Server Istanza gestita di SQL di Azure

In Service Broker vengono utilizzati tre tipi di messaggi di sistema per comunicare informazioni sullo stato e sugli errori di Service Broker.

Gestione dei messaggi di sistema

La maggior parte dei messaggi di una conversazione di Service Broker è costituita da messaggi definiti dall'applicazione utilizzati per la comunicazione tra servizi. Ogni messaggio deve essere conforme a un formato di tipo di messaggio definito da un'istruzione CREATE MESSAGE TYPE. Il set di tipi di messaggio consentiti per una conversazione è definito dal contratto specificato nell'istruzione BEGIN DIALOG CONVERSATION.

Oltre ai tipi di messaggio definiti dall'applicazione specificati nel contratto, qualsiasi conversazione può ricevere messaggi che usano uno dei tre tipi di messaggio definiti dal sistema. Questi tipi di messaggi sono utilizzati da Service Broker per segnalare gli errori e lo stato dei dialoghi. Ogni applicazione deve contenere la logica per gestire i messaggi di errore e i messaggi end dialog. Se l'applicazione imposta un timer di conversazione in una conversazione, deve contenere logica per gestire i messaggi relativi al timer del dialogo. Service Broker fornisce questi tipi di messaggio a ogni servizio, indipendentemente dal fatto che vengano visualizzati nel contratto per il servizio o meno. Per altre informazioni, vedere Gestione dei messaggi di errore di Service Broker.

messaggi di errore

Quando un servizio remoto termina una finestra di dialogo con un errore o il broker locale rileva un errore irreversibile in una finestra di dialogo, il broker locale crea un messaggio di errore. I messaggi di errore sono del tipo https://schemas.microsoft.com/SQL/ServiceBroker/Error. I messaggi di errore vengono convalidati come XML ben formato.

Il documento XML contenuto in un messaggio di errore usa lo spazio dei nomi https://schemas.microsoft.com/SQL/ServiceBroker. L'elemento radice del documento, con il nome locale Error, contiene un elemento denominato Code e un elemento denominato Message. L'elemento Code contiene un valore integer. L'elemento Message contiene il testo leggibile del messaggio.

Ad esempio, un messaggio di errore generato da un servizio che elabora le note spese potrebbe contenere il codice XML seguente (riformattato per la leggibilità):

<?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>

Un'operazione di ricezione riceve un messaggio di errore prima di qualsiasi messaggio per tale finestra di dialogo diverso da un messaggio timer della finestra di dialogo. Ciò si verifica indipendentemente dall'ordine in cui è arrivato il messaggio di errore nella coda. Quando una coda ha sia un messaggio timer della finestra di dialogo che un messaggio di errore, un'operazione di ricezione riceve il messaggio timer della finestra di dialogo prima del messaggio di errore.

Quando arriva un messaggio di errore per una finestra di dialogo, il broker genera un errore se un'applicazione tenta di inviare un messaggio in tale finestra di dialogo. Tuttavia, un'applicazione può ricevere eventuali messaggi rimanenti per la finestra di dialogo, anche dopo che riceve un messaggio di errore.

Messaggi della finestra di dialogo finale

Quando un'applicazione termina una finestra di dialogo senza specificare un errore, il broker locale invia un messaggio End Dialog al broker remoto. I messaggi di fine dialogo sono del tipo https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.

I messaggi end dialog sono messaggi vuoti. Un'operazione di ricezione riceve un messaggio end dialog nell'ordine in cui il messaggio è arrivato nella coda.

Messaggi timer finestra di dialogo

I messaggi timer della finestra di dialogo indicano che il timer della conversazione in una finestra di dialogo è scaduto. Questi messaggi sono del tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Un timer di conversazione è specifico di un lato della conversazione. Service Broker non invia mai un messaggio relativo al timer del dialogo all'altro lato della conversazione.

I messaggi timer della finestra di dialogo sono messaggi vuoti. Un'operazione di ricezione riceve il messaggio timer della finestra di dialogo prima di qualsiasi altro messaggio per tale finestra di dialogo, indipendentemente dall'ordine in cui è arrivato il messaggio di timeout nella coda.

Vedi anche