Condividi tramite


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.

Icona di collegamento a un argomentoConvenzioni 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.

    [!NOTA]

    Non creare un servizio che utilizzi 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 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 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 ai membri del ruolo predefinito del database db_ddladmin o db_owner e 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 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 ;