Занятие 4. Начало диалога
На этом занятии вы научитесь начинать диалог, охватывающий два экземпляра компонента Database Engine, и направлять сообщение-запрос от инициирующего экземпляра целевому. Выполните эти шаги из копии Management Studio, запущенной на том же компьютере, что и экземпляр инициатора.
Процедуры
Переключение на базу данных InitiatorDB
Скопируйте и вставьте следующий код в окно редактора запросов. Затем запустите его с тем, чтобы переключить контекст на базу данных InstInitiatorDB, где вы будете инициировать диалог.
USE InstInitiatorDB; GO
Начало диалога и отправка сообщения-запроса
Скопируйте и вставьте следующий код в окно редактора запросов. Затем запустите его, чтобы начать диалог, и направьте сообщение-запрос целевой службе //TgtDB/2InstSample/TargetService в базе данных InstTargetDB. Этот код необходимо запускать единым блоком, поскольку для передачи дескриптора диалога из инструкции BEGIN DIALOG в инструкцию SEND используется переменная. Пакет выполняет инструкцию BEGIN DIALOG для начала диалога, а затем создает сообщение-запрос. Затем в инструкции SEND используется дескриптор диалога для отправки в этом диалоге сообщения-запроса. Последняя инструкция SELECT просто отображает текст отправленного сообщения.
DECLARE @InitDlgHandle UNIQUEIDENTIFIER; DECLARE @RequestMsg NVARCHAR(100); BEGIN TRANSACTION; BEGIN DIALOG @InitDlgHandle FROM SERVICE [//InstDB/2InstSample/InitiatorService] TO SERVICE N'//TgtDB/2InstSample/TargetService' ON CONTRACT [//BothDB/2InstSample/SimpleContract] WITH ENCRYPTION = ON; SELECT @RequestMsg = N'<RequestMsg>Message for Target service.</RequestMsg>'; SEND ON CONVERSATION @InitDlgHandle MESSAGE TYPE [//BothDB/2InstSample/RequestMessage] (@RequestMsg); SELECT @RequestMsg AS SentRequestMsg; COMMIT TRANSACTION; GO
Следующие шаги
Вы успешно начали диалог и отправили сообщение-запрос целевой службе. Далее вы получите сообщение-запрос от целевой очереди и направите сообщение-ответ службе-инициатору. См. раздел Занятие 5. Получение запроса и отправка ответа.
См. также