Занятие 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. Получение запроса и отправка ответа.