CREATE SERVICE (Transact-SQL)
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 da sintaxe 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 service_name. Quando você especifica ANY para um nome de serviço em CREATE BROLER 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 for dbo ou sa, owner_name pode ser o nome de qualquer usuário ou função válida. Caso contrário, o 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 que tem como padrão os membros da função de banco de dados fixa db_ddladmin ou db_owner e a função de servidor fixa sysadmin. O usuário que executa a instrução CREATE SERVICE deve ter permissão de REFERENCES na fila e todos os contratos especificados.
A permissão REFERENCES para um serviço que tem como padrão o proprietário do serviço, os membros das funções de banco de dados fixas db_ddladmin ou db_owner e os membros da função de servidor fixa sysadmin. As permissões SEND para um serviço que tem como padrão o proprietário do serviço, os membros da função de banco de dados fixa db_owner e os membros da função de servidor fixa sysadmin.
Um serviço pode não ser um objeto temporário. Os 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 o serviço na fila //Adventure-Works.com/Expenses on the ExpenseQueue . 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 ;