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

新建日期: 2007 年 9 月 15 日

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

过程

切换到 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 帮助