CREATE SERVICE (Transact-SQL)
Область применения: SQL Server Управляемый экземпляр SQL Azure
Создает новую службу. Служба 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 не указано, используется схема по умолчанию пользователя, выполняющего инструкцию.
contract_name
Указывает контракт, для которого данная служба может быть целью. Служебные программы инициируют диалог с данной службой с помощью указанных контрактов. Если контракты не указаны, инициировать диалог может только служба.
[DEFAULT]
Указывает, что служба может быть целью для диалогов, которые следуют контракту DEFAULT. В контексте данного предложения слово DEFAULT не является ключевым словом и должно быть отделено как идентификатор. Контракт DEFAULT разрешает обеим сторонам диалога отправлять сообщения с типом сообщения DEFAULT. Тип сообщений DEFAULT не использует проверку.
Замечания
Служба раскрывает функциональность, обеспечиваемую контрактами, с которыми она связана, так что они могут быть использованы другими службами. Инструкция CREATE SERVICE
указывает контракты, для которых эта служба является целью. Службы могут быть целью только для диалогов, которые используют контракты, указанные службой. Служба, для которой не указаны контракты, не раскрывает функциональность другим службам.
Диалоги, инициированные такой службой, могут использовать любой контракт. Если служба только инициирует диалоги, ее можно создавать без определения контрактов.
Когда Service Broker принимает новый диалог от удаленной службы, имя целевой службы определяет очередь, в которую брокер размещает сообщения диалога.
Разрешения
Разрешение на создание значений по умолчанию для службы имеют члены предопределенных ролей базы данных db_ddladmin
и db_owner
или предопределенной роли сервера sysadmin
. Пользователь, выполняющий инструкцию CREATE SERVICE
, должен иметь разрешение REFERENCES
на очередь и все указанные контракты.
По умолчанию разрешением REFERENCES
на значения по умолчанию для службы обладает владелец службы, члены предопределенной роли базы данных db_ddladmin
или 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]) ;
B. Создание службы с несколькими контрактами
В следующем примере создается служба //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 ;
См. также
ALTER SERVICE (Transact-SQL)
DROP SERVICE (Transact-SQL)
EVENTDATA (Transact-SQL)