第 1 课:创建对话对象

适用于SQL ServerAzure SQL 托管实例

在本课中,你将学习如何生成使数据库能够支持数据库中对话的所有对象。

过程

启用 Service Broker 并切换到 AdventureWorks2008R2 数据库

注意

本文中的代码示例是使用 AdventureWorks2025 示例数据库进行测试的,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。

  • 复制以下代码并将其粘贴到查询编辑器窗口中。 然后,运行代码以确保在 AdventureWorks2008R2 数据库中启用了 Service Broker 并将上下文切换到此数据库。

    USE master;
    GO
    
    ALTER DATABASE AdventureWorks2008R2
        SET ENABLE_BROKER;
    GO
    
    USE AdventureWorks2008R2;
    GO
    

创建消息类型

  • 将以下代码复制并粘贴到“查询编辑器”窗口中,然后运行它来创建对话的消息类型。 由于通常在数据库引擎的多个实例间引用 Service Broker 对象,因而大多数 Service Broker 对象的名称都是以 URI 格式指定的。 这有助于确保它们跨多台计算机是唯一的。 这两种消息类型都指定 Service Broker 将仅验证消息的格式正确的 XML 文档,并且不会根据特定架构验证 XML。

    CREATE MESSAGE TYPE [//AWDB/1DBSample/RequestMessage]
        VALIDATION = WELL_FORMED_XML;
    
    CREATE MESSAGE TYPE [//AWDB/1DBSample/ReplyMessage]
        VALIDATION = WELL_FORMED_XML;
    GO
    

创建协定

  • 将以下代码复制并粘贴到“查询编辑器”窗口中,然后运行它来创建对话的协定。 约定指定了使用此约定的会话必须将类型为 /AWDB/1DBSample/RequestMessage 的消息从发起方发送到目标以及将类型为 //AWDB/1DBSample/ReplyMessage 的消息从目标发送到发起方。

    CREATE CONTRACT [//AWDB/1DBSample/SampleContract]
        ([//AWDB/1DBSample/RequestMessage] SENT BY INITIATOR,
        [//AWDB/1DBSample/ReplyMessage] SENT BY TARGET);
    GO
    

创建目标队列和服务

  • 复制以下代码并将其粘贴到查询编辑器窗口中。 然后,运行它以创建用于目标的队列和服务。 由于队列是从相同的数据库以类似于表和视图的方式引用的,因而队列名称的格式也类似于表名称或视图名称。 该 CREATE SERVICE 语句将服务与 . TargetQueue1DB. 因此,发送到服务的所有消息都将接收到。TargetQueue1DB CREATE SERVICE此外,还指定只有使用之前创建的 AWDB/1DBSample/SampleContract 的对话才能将服务用作目标服务。

    CREATE QUEUE TargetQueue1DB;
    
    CREATE SERVICE [//AWDB/1DBSample/TargetService]
        ON QUEUE TargetQueue1DB
        ([//AWDB/1DBSample/SampleContract]);
    GO
    

创建发起方队列和服务

  • 将以下代码复制并粘贴到“查询编辑器”窗口中,然后运行它来创建用于发起程序的队列和服务。 由于未指定约定名称,因而其他服务不可将此服务用作目标服务。

    CREATE QUEUE InitiatorQueue1DB;
    
    CREATE SERVICE [//AWDB/1DBSample/InitiatorService]
        ON QUEUE InitiatorQueue1DB;
    GO
    

后续步骤

已成功配置为 AdventureWorks2008R2 支持 AWDB/1DBSample/InitiatorServiceAWDB/1DBSample/TargetService 之间的会话。 接下来,使用配置完成对话。