CREATE SERVICE (Transact-SQL)

Cria um serviço novo. Um serviço Service Broker é o nome para uma tarefa específica ou conjunto de tarefas. O Service Broker usa o nome do serviço para determinar a rota de mensagens, entregar mensagens para a fila correta dentro do banco de dados, e para impor o contrato para uma conversação.

Ícone de vínculo de tópicoConvenções de 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çãoObservaçã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 conversações para este serviço usando os contratos especificados. Se nenhum contrato for especificado, o serviço só poderá iniciar conversações.

  • [DEFAULT]
    Especifica que o serviço pode ser um destino para as conversações 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ção 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 conversações 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 conversações iniciadas deste serviço podem usar qualquer contrato. Você criará um serviço sem especificar contratos quando o serviço só for iniciar conversações.

Quando o Service Broker aceita uma nova conversação de um serviço remoto, o nome do serviço de destino determina a fila em que o broker coloca as mensagens na conversação.

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 ;