CREATE SERVICE (Transact-SQL)
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Cria um serviço novo. Um serviço Service Broker é um nome de uma tarefa específica ou conjunto de tarefas. O Service Broker usa o nome do serviço para rotear mensagens, entregar mensagens para a fila correta dentro de um banco de dados e impor o contrato para uma conversa.
Convenções de sintaxe de Transact-SQL
Sintaxe
CREATE SERVICE service_name
[ AUTHORIZATION owner_name ]
ON QUEUE [ schema_name. ]queue_name
[ ( contract_name | [DEFAULT][ ,...n ] ) ]
[ ; ]
Argumentos
service_name
É o nome do serviço a ser criado. Um novo serviço é criado no banco de dados atual e é de propriedade do principal especificado na cláusula AUTHORIZATION. Os nomes de servidor, banco de dados e esquema não podem ser especificados. O service_name deve ser um sysname válido.
Observação
Não crie um serviço que usa a palavra-chave ANY para o contract_name. Quando você especifica ANY
para um nome de serviço em CREATE BROKER PRIORITY
, a prioridade é considerada para todos os serviços. Não fica limitada a um serviço cujo nome é ANY.
AUTHORIZATION owner_name
Define o proprietário do serviço para o usuário ou função de banco de dados especificados. Quando o usuário atual é dbo ou sa, owner_name pode ser o nome de qualquer usuário ou função válida. Caso contrário, owner_name deve ser o nome do usuário atual, o nome de um usuário para o qual o usuário atual tenha a permissão IMPERSONATE ou o nome de uma função à qual o usuário atual pertença.
ON QUEUE [ schema_name. ] queue_name
Especifica a fila que recebe as mensagens para o serviço. A fila deve existir no mesmo banco de dados assim como o serviço. Se nenhum schema_name for fornecido, o esquema será o esquema padrão para o usuário que executa a instrução.
contract_name
Especifica um contrato para o qual este serviço pode ser um destino. Os programas de serviço iniciam conversas para este serviço usando os contratos especificados. Se nenhum contrato for especificado, o serviço só poderá iniciar conversas.
[DEFAULT]
Especifica que o serviço pode ser um destino para as conversas que seguem o contrato DEFAULT. No contexto desta cláusula, DEFAULT não é uma palavra-chave e deve ser delimitado como um identificador. O contrato DEFAULT permite que ambos os lados da conversa enviem mensagens de tipo de mensagem DEFAULT. Mensagem tipo DEFAULT usa validação NONE.
Comentários
Um serviço expõe a funcionalidade fornecida pelos contratos com os quais está associado, de forma que eles possam ser usados por outros serviços. A instrução CREATE SERVICE
especifica os contratos para os quais este serviço é o destino. Um serviço só pode ser um destino para conversas que usam os contratos especificados pelo serviço. Um serviço que não especifica nenhum contrato, não expõe nenhuma funcionalidade a outros serviços.
As conversas iniciadas deste serviço podem usar qualquer contrato. Você criará um serviço sem especificar contratos quando o serviço só for iniciar conversas.
Quando o Service Broker aceita uma nova conversa de um serviço remoto, o nome do serviço de destino determina a fila em que o broker coloca as mensagens na conversa.
Permissões
A permissão para criar um serviço tem como padrão os membros das funções de banco de dados fixa db_ddladmin
ou db_owner
, ou a função de servidor fixa sysadmin
. O usuário que executa a instrução CREATE SERVICE
deve ter permissão REFERENCES
na fila e todos os contratos especificados.
A permissão REFERENCES
para um serviço assume como padrão o proprietário do serviço, os membros das funções de banco de dados fixas db_ddladmin
ou db_owner
, ou os membros da função de servidor fixa sysadmin
. As permissões SEND
para um serviço assumem como padrão o proprietário do serviço, os membros da função de banco de dados fixa db_owner
ou os membros da função de servidor fixa sysadmin
.
Um serviço pode não ser um objeto temporário. Nomes de serviços que começam com # são permitidos, mas são objetos permanentes.
Exemplos
a. Criando um serviço com um contrato
O exemplo seguinte cria o serviço //Adventure-Works.com/Expenses
na fila ExpenseQueue
no esquema dbo
. Diálogos que tenham esse serviço como destino devem seguir o contrato //Adventure-Works.com/Expenses/ExpenseSubmission
.
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
B. Criando um serviço com vários contratos
O exemplo a seguir cria o serviço //Adventure-Works.com/Expenses
na fila ExpenseQueue
. Diálogos que tenham esse serviço como destino devem seguir o contrato //Adventure-Works.com/Expenses/ExpenseSubmission
ou o contrato //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. Criando um serviço sem contratos
O exemplo a seguir cria a fila //Adventure-Works.com/Expenses on the ExpenseQueue
do serviço. Esse serviço não tem nenhuma informação de contrato. Portanto, o serviço só poderá ser o iniciador de um diálogo.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;
Consulte Também
ALTER SERVICE (Transact-SQL)
DROP SERVICE (Transact-SQL)
EVENTDATA (Transact-SQL)