CREATE SERVICE (Transact-SQL)
Si applica a: SQL Server Istanza gestita di SQL di Azure
Crea un nuovo servizio. Un servizio di Service Broker è un nome per un'attività specifica o per 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 nonché per l'applicazione del contratto per una conversazione.
Convenzioni relative alla 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. route_name deve essere un valore sysname valido.
Nota
Non creare un servizio che usa la parola chiave ANY per service_name. Quando si specifica ANY
per un nome del servizio in CREATE BROKER PRIORITY
, la priorità viene considerata per tutti i servizi e non è limitata a un servizio il cui nome è ANY.
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 usato 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 ed è pertanto necessario delimitarlo 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
o del 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 viene assegnata per impostazione predefinita al proprietario del servizio, ai membri del ruolo predefinito del database db_ddladmin
o db_owner
o ai 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
o 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
R. 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 creata la coda del 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 ;
Vedi anche
ALTER SERVICE (Transact-SQL)
DROP SERVICE (Transact-SQL)
EVENTDATA (Transact-SQL)