Поделиться через


CREATE SERVICE (Transact-SQL)

Создает новую службу. Служба компонента Service Broker является именем указанной задачи или набора задач. Компонент Service Broker использует это имя службы для маршрутизации сообщений, передачи сообщения в текущую очередь запросов внутри базы данных и навязывания контракта для диалога.

Значок ссылки на разделСоглашения о синтаксисе в Transact-SQL

Синтаксис

CREATE SERVICE service_name
   [ AUTHORIZATION owner_name ]
   ON QUEUE [ schema_name. ]queue_name
   [ ( contract_name | [DEFAULT][ ,...n ] ) ]
[ ; ]

Аргументы

  • service_name
    Имя создаваемой службы. Новая служба создается в текущей базе данных. Владельцем службы назначается участник, указанный в предложении AUTHORIZATION. Не могут быть указаны имена сервера, базы данных и схемы. Аргумент service_name должен быть допустимым объектом типа sysname.

    ПримечаниеПримечание

    Не создавайте службу, которая использует ключевое слово ANY для service_name. При указании ключевого слова ANY для имени службы в инструкции CREATE BROKER PRIORITY приоритет применяется ко всем службам. Его применение не ограничивается службой с именем ANY.

  • AUTHORIZATION owner_name
    Определяет в качестве владельца службы указанного пользователя или роль базы данных. Если текущим пользователем является dbo или sa, то аргумент owner_name может быть именем любого допустимого пользователя или роли. В противном случае аргумент owner_name должен быть именем текущего пользователя, именем пользователя, для которого у текущего пользователя есть разрешение IMPERSONATE, или именем роли, которой принадлежит текущий пользователь.

  • ON QUEUE [ schema_name**.** ] queue_name
    Указывает очередь, в которую поступают сообщения для службы. Очередь должна существовать в той же самой базе данных, что и служба. Если имя схемы schema_name не указано, используется схема по умолчанию пользователя, выполняющего инструкцию.

  • contract_name
    Указывает контракт, для которого данная служба может быть целью. Служебные программы инициируют диалог с данной службой с помощью указанных контрактов. Если контракты не указаны, инициировать диалог может только служба.

  • [DEFAULT]
    Указывает, что служба может быть целью для диалогов, которые следуют контракту DEFAULT. В контексте данного предложения слово DEFAULT не является ключевым словом и должно быть отделено как идентификатор. Контракт DEFAULT разрешает обеим сторонам диалога отправлять сообщения с типом сообщения DEFAULT. Тип сообщений DEFAULT не использует проверку.

Замечания

Служба раскрывает функциональность, обеспечиваемую контрактами, с которыми она связана, так что они могут быть использованы другими службами. Инструкция CREATE SERVICE указывает контракты, для которых эта служба является целью. Службы могут быть целью только для диалогов, которые используют контракты, указанные службой. Служба, для которой не указаны контракты, не раскрывает функциональность другим службам.

Диалоги, инициированные такой службой, могут использовать любой контракт. Если служба только инициирует диалоги, ее можно создавать без определения контрактов.

Когда компонент Service Broker принимает новый диалог от удаленной службы, имя целевой службы определяет очередь, в которую брокер размещает сообщения диалога.

Разрешения

Разрешение на создание службы по умолчанию имеют члены предопределенных ролей db_ddladmin и db_owner базы данных и предопределенной роли сервера sysadmin. Пользователь, выполняющий инструкцию CREATE SERVICE, должен иметь разрешение REFERENCES на очередь и все указанные контракты.

Разрешение REFERENCES на службу по умолчанию имеет владелец службы, члены предопределенных ролей db_admin или db_owner базы данных и члены предопределенной роли сервера sysadmin. Разрешение SEND на службу по умолчанию имеет владелец службы, члены предопределенной роли базы данных db_owner и члены предопределенной роли сервера sysadmin.

Служба не может быть временным объектом. Имена служб, начинающиеся с #, допустимы, но являются постоянными объектами.

Примеры

А. Создание службы с одним контрактом

В следующем примере создается служба //Adventure-Works.com/Expenses в очереди ExpenseQueue в схеме dbo. Диалоги, которые задают данную службу, должны следовать контракту //Adventure-Works.com/Expenses/ExpenseSubmission.

CREATE SERVICE [//Adventure-Works.com/Expenses]
    ON QUEUE [dbo].[ExpenseQueue]
    ([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;

Б. Создание службы с несколькими контрактами

В следующем примере создается служба //Adventure-Works.com/Expenses в очереди ExpenseQueue. Диалоги, которые задают данную службу, должны следовать контракту //Adventure-Works.com/Expenses/ExpenseSubmission или //Adventure-Works.com/Expenses/ExpenseProcessing.

CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue
    ([//Adventure-Works.com/Expenses/ExpenseSubmission],
     [//Adventure-Works.com/Expenses/ExpenseProcessing]) ;

В. Создание службы без контрактов

В следующем примере создается служба в очереди //Adventure-Works.com/Expenses on the ExpenseQueue . Данная служба не имеет сведений о контракте. Поэтому она может быть только инициатором диалога.

CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;