Messaggi di Service Broker

La maggior parte delle comunicazioni tra applicazioni viene gestita mediante messaggi specifici dell'applicazione, definiti come oggetti di tipo messaggio. Service Broker offre inoltre tre tipi di messaggi contenenti informazioni generate da Service Broker anziché dati specifici dell'applicazione. In ogni applicazione deve essere presente una regola per la gestione dei messaggi di errore e dei messaggi di fine dialogo. Se nell'applicazione viene impostato un timer di conversazione per una conversazione di dialogo, nell'applicazione deve essere presente la regola per la gestione dei messaggi relativi al timer del dialogo. Service Broker fornisce questi tipi di messaggi per tutti i servizi, anche se non sono presenti nel contratto per il servizio.

I messaggi relativi al timer del dialogo indicano che il timer di conversazione di un dialogo è scaduto. Questi messaggi sono di 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 relativi al timer del dialogo sono vuoti e raggiungono un'operazione di ricezione prima di qualsiasi altro messaggio per il dialogo, indipendentemente dall'ordine con il quale il messaggio di timeout è stato inserito nella coda.

Messaggi di errore

Quando un servizio remoto termina un dialogo con un errore o l'istanza locale di Service Broker rileva un errore irreversibile in un dialogo, viene creato un messaggio di errore. I messaggi di errore sono di tipo https://schemas.microsoft.com/SQL/ServiceBroker/Error e vengono convalidati come codice XML corretto.

Il documento XML contenuto in un messaggio di errore utilizza lo spazio dei nomi https://schemas.microsoft.com/SQL/ServiceBroker. L'elemento principale 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 per l'elaborazione di rapporti spese può contenere il codice XML seguente (riformattato per migliorare la leggibilità):

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

Un messaggio di errore raggiunge un'operazione di ricezione prima di qualsiasi altro messaggio per quel dialogo, ad eccezione di un messaggio relativo al timer del dialogo, indipendentemente dall'ordine con il quale il messaggio di errore è stato inserito nella coda. Quando in una coda sono presenti sia un messaggio relativo al timer del dialogo che un messaggio di errore, il messaggio relativo al timer raggiunge l'operazione di ricezione prima del messaggio di errore.

Dopo la ricezione di un messaggio di errore per un dialogo, se un'applicazione tenta di inviare un messaggio per quel dialogo Service Broker genera un errore. Un'applicazione, tuttavia, può ricevere eventuali messaggi rimanenti per il dialogo anche dopo la ricezione di un messaggio di errore.

Quando un'applicazione termina un dialogo senza generare un errore, l'istanza locale di Service Broker invia un messaggio di fine dialogo all'istanza remota di Service Broker. I messaggi di fine dialogo sono del tipo https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.

I messaggi di fine dialogo sono vuoti. Un'operazione di ricezione riceve un messaggio di fine dialogo nell'ordine in cui il messaggio è stato inserito nella coda.

Vedere anche

Attività

Procedura: Recupero di informazioni da un messaggio di errore di Service Broker (Transact SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005