Занятие 5. Получение запроса и отправка ответа
Добавления: 15 сентября 2007 г.
На этом занятии вы узнаете, как получать сообщение-запрос из целевой очереди и отправлять ответное сообщение вызывающей службе. Выполните эти шаги из копии среды Management Studio, запущенной на том же компьютере, на котором находится целевой экземпляр компонента Database Engine.
Процедуры
Переключиться в базу данных TargetDB
Скопируйте и вставьте следующий код в окно редактора запросов. После этого выполните его, чтобы переключить контекст в базу данных InstTargetDB, в которой будет получено сообщение-запрос и отправлено ответное сообщение в базу данных InstInitiatorDB.
USE InstTargetDB; GO
Получить запрос и отправить ответ
Скопируйте и вставьте следующий код в окно редактора запросов. Затем выполните его, чтобы получить ответное сообщение из очереди 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