第 4 课:启动对话

在本课中,您将学习启动一个跨越两个数据库引擎实例的会话并将请求消息从发起方实例发送到目标实例。从与发起方实例运行在同一计算机上的 Management Studio 副本中执行这些步骤。

过程

切换到 InitiatorDB 数据库

  • 复制以下代码并将其粘贴到查询编辑器窗口中。然后,运行代码以将上下文切换到 InstInitiatorDB 数据库,您将在其中启动会话。

    USE InstInitiatorDB;
    GO
    

启动会话并发送请求消息

  • 复制以下代码并将其粘贴到查询编辑器窗口中。然后,运行代码启动一个对话并将请求消息发送到 InstTargetDB 中的 //TgtDB/2InstSample/TargetService。该代码必须在一个块中运行,因为是使用变量将对话句柄从 BEGIN DIALOG 语句传递到 SEND 语句。批处理将运行 BEGIN DIALOG 语句以开始该会话,并生成一个请求消息。然后,它在 SEND 语句中使用对话句柄发送该会话的请求消息。最后一条 SELECT 语句的目的仅是显示已发送消息的文本。

    DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RequestMsg NVARCHAR(100);
    
    BEGIN TRANSACTION;
    
    BEGIN DIALOG @InitDlgHandle
         FROM SERVICE [//InstDB/2InstSample/InitiatorService]
         TO SERVICE N'//TgtDB/2InstSample/TargetService'
         ON CONTRACT [//BothDB/2InstSample/SimpleContract]
         WITH
             ENCRYPTION = ON;
    
    SELECT @RequestMsg = N'<RequestMsg>Message for Target service.</RequestMsg>';
    
    SEND ON CONVERSATION @InitDlgHandle
         MESSAGE TYPE [//BothDB/2InstSample/RequestMessage]
         (@RequestMsg);
    
    SELECT @RequestMsg AS SentRequestMsg;
    
    COMMIT TRANSACTION;
    GO
    

后续步骤

您已经成功启动会话并将请求消息发送到目标服务。接下来,您将从目标队列接收请求消息并将答复消息发送到发起方服务。请参阅第 5 课:接收请求并发送答复