Занятие 1. Создание основных объектов диалога
На этом занятии обсуждается создание объектов, позволяющих поддерживать диалог в базе данных.
Процедуры
Включение компонента Service Broker и переключение в базу данных AdventureWorks
Скопируйте и вставьте следующий код в окно редактора запросов. Затем выполните его, чтобы убедиться во включении компонента Service Broker в базе данных AdventureWorks и переключить в нее контекст.
USE master; GO ALTER DATABASE AdventureWorks SET ENABLE_BROKER; GO USE AdventureWorks; GO
Создание типов сообщений
Скопируйте и вставьте следующий код в окно редактора запросов. Затем запустите его, чтобы создать типы сообщений для диалога. Поскольку на объекты Service Broker часто ссылаются несколько экземпляров компонента Database Engine, большинству объектов компонента Service Broker присваиваются имена в формате URI. Это помогает обеспечить уникальность имен в пределах нескольких компьютеров. Оба типа сообщений указывают, что компонент Service Broker проверяет лишь то, что сообщения являются правильно сформированными XML-документами, но не проверяет их правильность по конкретной схеме.
CREATE MESSAGE TYPE [//AWDB/InternalAct/RequestMessage] VALIDATION = WELL_FORMED_XML; CREATE MESSAGE TYPE [//AWDB/InternalAct/ReplyMessage] VALIDATION = WELL_FORMED_XML; GO
Создание контракта
Скопируйте и вставьте следующий код в окно редактора запросов. Затем запустите его, чтобы создать контракт для диалога. Контракт указывает, что использующие его диалоги должны отправлять сообщения с типом //AWDB/InternalAct/RequestMessage от стороны-инициатора целевой стороне, а сообщения с типом //AWDB/InternalAct/ReplyMessage — от целевой стороны стороне-инициатору.
CREATE CONTRACT [//AWDB/InternalAct/SampleContract] ([//AWDB/InternalAct/RequestMessage] SENT BY INITIATOR, [//AWDB/InternalAct/ReplyMessage] SENT BY TARGET ); GO
Создание очереди и службы целевой стороны
Скопируйте и вставьте следующий код в окно редактора запросов. Затем запустите его, чтобы создать очередь и службу, которые будут использоваться для целевой стороны. Поскольку ссылки на очереди из одной и той же базы данных напоминают ссылки на таблицы и представления, очереди имеют такие же имена, что и таблицы и представления. Инструкция CREATE SERVICE позволяет связать эту службу с очередью TargetQueueIntAct. Таким образом, все направляемые службе сообщения будут получены очередью TargetQueueIntAct. Инструкция CREATE SERVICE указывает также, что только диалоги, использующие созданный ранее контракт //AWDB/InternalAct/SampleContract, могут использовать эту службу в качестве целевой.
CREATE QUEUE TargetQueueIntAct; CREATE SERVICE [//AWDB/InternalAct/TargetService] ON QUEUE TargetQueueIntAct ([//AWDB/InternalAct/SampleContract]); GO
Создание очереди и службы инициатора
Скопируйте и вставьте следующий код в окно редактора запросов. Затем запустите его, чтобы создать очередь и службу, которые будут использоваться для инициирующей стороны. Поскольку не указано имя контракта, никакие другие службы не могут использовать эту службу в качестве целевой.
CREATE QUEUE InitiatorQueueIntAct; CREATE SERVICE [//AWDB/InternalAct/InitiatorService] ON QUEUE InitiatorQueueIntAct; GO
Следующие шаги
Настройка базы данных AdventureWorks для поддержки диалога между службами //AWDB/InternalAct/InitiatorService и //AWDB/InternalAct/TargetService успешно завершена. Далее необходимо создать хранимую процедуру для поддержки внутренней активации в целевой очереди. См. раздел Занятие 2. Создание процедуры внутренней активации.