第 1 课:创建基本会话对象

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

过程

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

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

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

创建消息类型

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

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

创建约定

  • 复制以下代码并将其粘贴到查询编辑器窗口中。然后,运行代码为会话创建约定。约定指定使用此约定的会话必须将类型为 //AWDB/InternalAct/RequestMessage 的消息从发起方发送到目标,同时还必须将类型为 //AWDB/InternalAct/ReplyMessage 的消息从目标发送到发起方。

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

创建目标队列和服务

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

    CREATE QUEUE TargetQueueIntAct;
    
    CREATE SERVICE
           [//AWDB/InternalAct/TargetService]
           ON QUEUE TargetQueueIntAct
              ([//AWDB/InternalAct/SampleContract]);
    GO
    

创建发起方队列和服务

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

    CREATE QUEUE InitiatorQueueIntAct;
    
    CREATE SERVICE
           [//AWDB/InternalAct/InitiatorService]
           ON QUEUE InitiatorQueueIntAct;
    GO
    

后续步骤

已成功地将 AdventureWorks 配置为支持 //AWDB/InternalAct/InitiatorService//AWDB/InternalAct/TargetService 之间的会话。下面,您将要创建一个存储过程,以支持目标队列上的内部激活。请参阅第 2 课:创建内部激活过程