CREATE SERVICE (Transact-SQL)
Crea un nuovo servizio. Un servizio di Service Broker è rappresentato da un nome per un'attività o un set di attività. Il nome del servizio viene utilizzato da Service Broker per il routing dei messaggi, il recapito dei messaggi alla coda corretta in un database e l'applicazione del contratto per una conversazione.
Convenzioni della sintassi Transact-SQL
Sintassi
CREATE SERVICE service_name
[ AUTHORIZATION owner_name ]
ON QUEUE [ schema_name. ]queue_name
[ ( contract_name | [DEFAULT] [ ,...n ] ) ]
[ ; ]
Argomenti
- service_name
Nome del servizio da creare. I nuovi servizi vengono creati nel database corrente e sono di proprietà dell'entità specificata nella clausola AUTHORIZATION. Non è possibile specificare i nomi del server, del database e dello schema. service_name deve essere un sysname valido.
- AUTHORIZATION owner_name
Imposta come proprietario del servizio l'utente o il ruolo del database specificato. Se l'utente corrente è dbo o sa, owner_name può essere il nome di qualsiasi utente o ruolo valido. In caso contrario, owner_name deve corrispondere al nome dell'utente corrente, al nome di un utente per il quale l'utente corrente dispone di autorizzazione IMPERSONATE oppure al nome di un ruolo a cui appartiene l'utente corrente.
- ON QUEUE [ schema_name**.** ] queue_name
Specifica la coda che riceve i messaggi per il servizio. La coda deve esistere nello stesso database del servizio. Se non si specifica schema_name, viene utilizzato lo schema predefinito per l'utente che esegue l'istruzione.
- contract_name
Specifica il contratto da utilizzare quando il servizio funge da servizio di destinazione per conversazioni. I programmi del servizio avviano le conversazioni con questo servizio utilizzando i contratti specificati. Se non si specifica alcun contratto, il servizio può solo avviare conversazioni.
- [DEFAULT]
Specifica che il servizio può fungere da servizio di destinazione per le conversazioni che seguono il contratto DEFAULT. Nel contesto di questa clausola, DEFAULT non è una parola chiave e deve essere delimitato come identificatore. Il contratto DEFAULT consente a entrambi i lati della conversazione di inviare messaggi di tipo DEFAULT. Per il tipo di messaggi DEFAULT viene utilizzata la convalida NONE.
Osservazioni
Un servizio espone la funzionalità fornita dai contratti a cui è associato, rendendone possibile l'utilizzo da parte di altri servizi. L'istruzione CREATE SERVICE specifica i contratti per cui questo servizio funge da destinatario. Un servizio può fungere da destinatario solo per le conversazioni che utilizzano i contratti specificati dal servizio. Un servizio che non specifica alcun contratto non espone alcuna funzionalità per gli altri servizi.
Le conversazioni avviate da questo servizio possono utilizzare qualsiasi contratto. Creare un servizio senza specificare alcun contratto se il servizio deve solo avviare conversazioni.
Quando Service Broker accetta una nuova conversazione da un servizio remoto, il nome del servizio di destinazione determina la coda in cui Service Broker inserirà i messaggi della conversazione.
Autorizzazioni
L'autorizzazione per la creazione di un servizio viene assegnata per impostazione predefinita ai membri del ruolo predefinito del database db_ddladmin o db_owner e al ruolo predefinito del server sysadmin. L'utente che esegue l'istruzione CREATE SERVICE deve disporre dell'autorizzazione REFERENCES per la coda e per tutti i contratti specificati.
L'autorizzazione REFERENCES per un servizio può essere eliminata dal proprietario del servizio, dai membri dei ruoli predefiniti del database db_ddladmin o db_owner o dai membri del ruolo predefinito del server sysadmin. Le autorizzazioni SEND per un servizio vengono assegnate per impostazione predefinita al proprietario del servizio, ai membri del ruolo predefinito del database db_owner e ai membri del ruolo predefinito del server sysadmin.
Un servizio non può essere un oggetto temporaneo. I nomi dei servizi che iniziano con # sono consentiti, ma sono oggetti permanenti.
Esempi
A. Creazione di un servizio con un contratto
Nell'esempio seguente viene creato il servizio //Adventure-Works.com/Expenses
per la coda ExpenseQueue
nello schema dbo
. I dialoghi per questo servizio devono essere basati sul contratto //Adventure-Works.com/Expenses/ExpenseSubmission
.
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
B. Creazione di un servizio con più contratti
Nell'esempio seguente viene creato il servizio //Adventure-Works.com/Expenses
per la coda ExpenseQueue
. I dialoghi per questo servizio devono essere basati sul contratto //Adventure-Works.com/Expenses/ExpenseSubmission
oppure sul contratto //Adventure-Works.com/Expenses/ExpenseProcessing
.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue
([//Adventure-Works.com/Expenses/ExpenseSubmission],
[//Adventure-Works.com/Expenses/ExpenseProcessing]) ;
C. Creazione di un servizio senza contratti
Nell'esempio seguente viene creato il servizio //Adventure-Works.com/Expenses on the ExpenseQueue
. Per questo servizio non è stato specificato alcun contratto, quindi il servizio può solo fungere da initiator di un dialogo.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;
Vedere anche
Riferimento
ALTER SERVICE (Transact-SQL)
DROP SERVICE (Transact-SQL)
EVENTDATA (Transact-SQL)
Altre risorse
Esercitazioni su Service Broker
Creating Service Broker Applications