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

在此课中,您将学习如何从目标队列接收请求消息并将答复消息发送到发起方服务。请从与数据库引擎的目标实例运行在同一台计算机上的 Management Studio 副本执行这些步骤。

过程

切换到 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 课:接收答复并结束会话