Share via


Creazione di applicazioni di Service Broker

In questa sezione viene fornita una panoramica generale della struttura di un'applicazione di Service Broker, vengono descritte alcune delle strategie più comuni per l'avvio di un'applicazione che utilizza Service Broker e vengono illustrati i passaggi di base per ricevere ed elaborare messaggi.

L'applicazione per un servizio di origine utilizza l'istruzione BEGIN DIALOG per specificare le informazioni sui servizi in ogni endpoint e il contratto di servizio che l'applicazione utilizzerà per la comunicazione. Per inviare il primo messaggio della conversazione al servizio di destinazione, l'applicazione utilizza l'istruzione SEND. L'applicazione deve inoltre essere preparata per ricevere ed elaborare messaggi da Service Broker, anche se il contratto non consente al servizio di destinazione di restituire messaggi. L'applicazione di origine viene spesso implementata come due componenti separati, uno dei quali avvia la conversazione, mentre l'altro elabora i messaggi che arrivano nella coda.

L'applicazione per un servizio di destinazione riceve ed elabora messaggi dal servizio di origine. L'applicazione deve inoltre essere preparata per ricevere ed elaborare messaggi da Service Broker.

In base alle esigenze del servizio, la parte dell'applicazione che elabora la coda può essere avviata in modalità diverse. Per ulteriori informazioni sull'avvio di un'applicazione che utilizza Service Broker, vedere Scelta di una strategia di avvio.

Indipendentemente dal modo in cui viene avviata, l'applicazione inizia una transazione e utilizza l'istruzione RECEIVE per rimuovere un messaggio dalla coda. L'applicazione estrae i dati dai messaggi ed esegue tutte le operazioni di elaborazione richieste. Se necessario, l'applicazione utilizza l'istruzione SEND per inviare i messaggi all'altro lato della conversazione, quindi esegue il commit della transazione. Per motivi di efficienza, l'applicazione può elaborare più messaggi all'interno della stessa transazione. I servizi che mantengono le informazioni sullo stato utilizzano spesso l'istruzione GET CONVERSATION GROUP per bloccare un gruppo di conversazioni, recuperare lo stato per il gruppo di conversazioni, quindi elaborare più messaggi per il gruppo di conversazioni stesso.

La conversazione continua mediante l'utilizzo di istruzioni SEND e RECEIVE per trasmettere messaggi tra gli endpoint. In qualsiasi momento, se necessario, ogni partecipante alla conversazione può utilizzare BEGIN DIALOG per avviare una conversazione con un altro servizio per ottenere informazioni aggiuntive. Un'applicazione che elabora una notifica degli eventi ad esempio può iniziare un'altra conversazione con un servizio che fornisce informazioni sul personale per recuperare le informazioni di contatto correnti prima di inviare un avviso.

Quando la conversazione ha ottenuto lo scopo, l'applicazione nell'endpoint appropriato utilizzerà un'istruzione END CONVERSATION per terminare la conversazione. L'altro partecipante riceve il messaggio END CONVERSATION e invia quindi un messaggio END CONVERSATION sul proprio lato. Una volta che entrambi partecipanti hanno inviato i messaggi END CONVERSATION, la conversazione termina.

Se si verifica un errore, un partecipante alla conversazione può indicare tale situazione terminando la conversazione tramite la clausola WITH ERROR. In questo modo la conversazione viene terminata e viene inviato un messaggio di errore di Service Broker all'altro partecipante alla conversazione.

Se Service Broker rileva un errore o la durata della conversazione scade, Service Broker termina la conversazione e restituisce un messaggio di errore ai partecipanti attivi. Se Service Broker non è in grado di stabilire una conversazione, l'unico partecipante attivo è l'applicazione di origine e l'errore viene recapitato al servizio di origine. Se un partecipante ha già terminato la conversazione, il messaggio di errore viene recapitato all'altro partecipante. In caso contrario, l'errore viene recapitato a entrambi i partecipanti alla conversazione.

Contenuto della sezione