第 5 课:接收请求并发送回复

适用于SQL ServerAzure SQL 托管实例

在本课中,你将了解如何从目标队列接收请求消息,以及如何向发起方服务发送回复消息。 从与数据库引擎的目标实例相同的计算机上运行的 Management Studio 副本运行这些步骤。

过程

切换到 TargetDB 数据库

  • 将以下代码复制并粘贴到“查询编辑器”窗口中,然后运行它,将上下文切换到 InstTargetDB 数据库,在该数据库中收到请求消息并将回复消息发送回 InstInitiatorDB

    USE InstTargetDB;
    GO
    

接收请求并发送答复

  • 复制以下代码并将其粘贴到查询编辑器窗口中。 然后,运行该代码以接收来自 InstTargetQueue 的答复消息,并将答复消息发回给发起程序。 该 RECEIVE 语句检索请求消息,然后以下 SELECT 语句显示文本,以便可以验证它是否与上一步骤中发送的消息相同。 该 IF 语句测试收到的消息是否为请求消息类型,以及是否 SEND 使用语句将答复消息发送回发起程序。 该 END CONVERSATION 语句用于结束对话的目标端。 最后 SELECT 一条语句显示答复消息的文本。

    DECLARE @RecvReqDlgHandle AS UNIQUEIDENTIFIER;
    DECLARE @RecvReqMsg AS NVARCHAR (100);
    DECLARE @RecvReqMsgName AS 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 AS 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
    

后续步骤

已成功收到请求消息,并向发起方服务发送了回复消息。 接下来,收到来自发起程序队列的答复消息并结束对话。