Creazione di oggetti di Service Broker

Per utilizzare Service Broker, un'applicazione esegue istruzioni Transact-SQL che operano su oggetti di Service Broker definiti in un database. In questa sezione vengono descritte considerazioni generali per la creazione di oggetti di Service Broker per un'applicazione.

Panoramica

Gli oggetti di Service Broker definiscono i metadati e l'archiviazione per un set specifico di attività. Di seguito vengono riportati tali oggetti:

  • Tipi di messaggi che definiscono i dati scambiati in una conversazione.

  • Contratti che definiscono le attività. Ogni contratto definisce i tipi di messaggi che possono essere utilizzati in una conversazione specifica, nonché il lato della conversazione che può inviare il messaggio.

  • Coda in cui vengono archiviati i messaggi in arrivo per un servizio.

  • Servizio che rappresenta un set correlato di attività aziendali. Il nome del servizio viene inoltre utilizzato per individuare la coda relativa al servizio stesso.

Si noti che un contratto dipende da uno o più tipi di messaggi, mentre un servizio dipende da una coda e può dipendere da uno o più contratti. Di conseguenza i contratti vengono creati dopo i tipi di messaggi e vengono eliminati prima di questi ultimi, mentre i servizi vengono creati dopo le code e i contratti e vengono eliminati prima di questi ultimi.

Creazione di oggetti per un servizio

La procedura per la creazione di un servizio segue la stessa struttura di base indipendentemente dal fatto che il servizio sia un servizio di origine o di destinazione o che li rappresenti entrambi.

La definizione di un servizio specifica i contratti per cui il servizio stesso rappresenta una destinazione, mentre un'applicazione può utilizzare un servizio per avviare una conversazione che utilizza qualsiasi contratto definito nel database. In Service Broker viene seguito questo approccio per applicare la regola generale in base alla quale un servizio deve ricevere solo messaggi che l'applicazione può elaborare. Per garantire che l'applicazione non riceva messaggi di tipo arbitrario o sconosciuto, in Service Broker viene accettato un nuovo dialogo solo se quest'ultimo segue un contratto specificato nel servizio. Poiché un servizio di origine specifica il contratto da utilizzare all'inizio della conversazione, non è necessario includere il contratto nella definizione del servizio stesso.

Per creare gli oggetti per un servizio, effettuare le operazioni seguenti:

  1. Creare i tipi di messaggi che definiscono i messaggi utilizzati dal servizio per realizzare tutte le comunicazioni obbligatorie. È possibile definire questi tipi in modo autonomo oppure ottenere script per creare i tipi dall'autore del servizio con cui comunicherà il servizio utilizzato. Ignorare questo passaggio quando il database contiene già i tipi di messaggi necessari al servizio.

  2. Creare uno o più contratti che definiscono la struttura delle conversazioni cui il servizio specifico può partecipare. È possibile definire questo contratto in modo autonomo oppure ottenere script per creare il contratto dall'autore del servizio con cui comunicherà il servizio utilizzato. Ignorare questo passaggio quando il database contiene già i contratti necessari al servizio.

  3. Creare una coda che viene utilizzata da Service Broker per ricevere e archiviare i messaggi in arrivo per il servizio. Per ulteriori informazioni sulla creazione di code, vedere CREATE QUEUE. È necessario che ogni servizio disponga di una coda. Per rendere più semplici la programmazione e l'amministrazione, ogni servizio utilizza in genere una coda dedicata per il servizio stesso. Se per il servizio è necessario utilizzare la memorizzazione dei messaggi, specificare tale funzionalità per la coda.

  4. Creare un servizio. La definizione del servizio specifica la coda utilizzata dal servizio e i contratti per cui tale servizio rappresenta la destinazione.

Nella maggior parte dei casi l'utente crea il servizio di destinazione, quindi utilizza i contratti e i tipi di messaggi creati per tale servizio per creare un servizio di origine. In alcuni casi tuttavia è possibile creare un servizio di destinazione per un servizio di origine già definito. In casi di questo tipo il servizio di destinazione utilizza i tipi di messaggi e i contratti utilizzati dal servizio di origine. Se si crea ad esempio un servizio di destinazione per ricevere notifiche degli eventi, il contratto utilizzato è https://schemas.microsoft.com/SQL/Notifications/PostEventNotification poiché tale contratto è quello utilizzato dal servizio di origine.

Gestione delle definizioni di oggetti

È consigliabile creare uno script Transact-SQL per gli oggetti di Service Broker utilizzati dall'applicazione. Tale script Transact-SQL consente di fare riferimento in modo semplice alle specifiche degli oggetti di Service Broker utilizzati, nonché di distribuire il servizio in un sistema diverso o di ricrearlo qualora sia necessario.

Se l'applicazione prevede l'invio di messaggi tra istanze di SQL Server, è consigliabile creare uno script che definisca i tipi di messaggi e i contratti per il servizio e un secondo script che definisca la coda e il servizio. Il primo script definisce l'interfaccia per il servizio, ovvero gli oggetti comuni sia per il servizio di origine che per quello di destinazione, mentre il secondo script definisce il nome del servizio e la coda, ovvero gli oggetti per un lato della conversazione.

Contenuto della sezione