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


Занятие 5. Получение запроса и отправка ответа

Добавления: 15 сентября 2007 г.

На этом занятии вы узнаете, как получать сообщение-запрос из целевой очереди и отправлять ответное сообщение вызывающей службе. Выполните эти шаги из копии среды Management Studio, запущенной на том же компьютере, на котором находится целевой экземпляр компонента Database Engine.

Процедуры

Переключиться в базу данных TargetDB

  1. Скопируйте и вставьте следующий код в окно редактора запросов. После этого выполните его, чтобы переключить контекст в базу данных InstTargetDB, в которой будет получено сообщение-запрос и отправлено ответное сообщение в базу данных InstInitiatorDB.

    USE InstTargetDB;
    GO
    

Получить запрос и отправить ответ

  1. Скопируйте и вставьте следующий код в окно редактора запросов. Затем выполните его, чтобы получить ответное сообщение из очереди InstTargetQueue и отправить ответное сообщение обратно инициатору. Инструкция RECEIVE получает сообщение запроса. Следующая инструкция SELECT выводит текст, позволяющий убедиться, что получено то же сообщение, что было отправлено на предыдущем шаге. Инструкция IF проверяет, имеет ли полученное сообщение тип запроса и используется ли инструкция SEND для отправки ответного сообщения вызывающей стороне. Инструкция END CONVERSATION используется для завершения работы целевой стороны диалога. Последняя инструкция SELECT выводит текст ответного сообщения.

    DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RecvReqMsg NVARCHAR(100);
    DECLARE @RecvReqMsgName sysname;
    
    BEGIN TRANSACTION;
    
    RECEIVE TOP(1)
        @RecvReqDlgHandle = conversation_handle,
        @RecvReqMsg = message_body,
        @RecvReqMsgName = message_type_name
    FROM InstTargetQueue;
    
    SELECT @RecvReqMsg AS ReceivedRequestMsg;
    
    IF @RecvReqMsgName = N'//BothDB/2InstSample/RequestMessage'
    BEGIN
         DECLARE @ReplyMsg NVARCHAR(100);
         SELECT @ReplyMsg =
            N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
         SEND ON CONVERSATION @RecvReqDlgHandle
              MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
              (@ReplyMsg);
    
         END CONVERSATION @RecvReqDlgHandle;
    END
    
    SELECT @ReplyMsg AS SentReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Следующие шаги

Вы успешно получили сообщение-запрос и отправили ответное сообщение вызывающей службе. После этого можно получить ответное сообщение из вызывающей очереди и закончить диалог. См. раздел Занятие 6. Получение ответа и завершение диалога.

См. также

Другие ресурсы

END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
WAITFOR (Transact-SQL)
Service Broker Programming Basics

Справка и поддержка

Получение помощи по SQL Server 2005