Занятие 5. Получение запроса и отправка ответа
Это занятие дает представление о том, как получить сообщение запроса из целевой очереди и отправить ответное сообщение службе инициатора. Эти шаги выполняют из копии среды 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; WAITFOR ( RECEIVE TOP(1) @RecvReqDlgHandle = conversation_handle, @RecvReqMsg = message_body, @RecvReqMsgName = message_type_name FROM InstTargetQueue ), TIMEOUT 1000; 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. Получение ответа и завершение диалога.
См. также