第 1 课:创建目标数据库

在本课中,您将学习创建目标数据库和所有与发起方数据库不存在依赖关系的 Service Broker 目标对象。从与数据库引擎目标实例运行在同一台计算机上的 Management Studio 副本中执行这些步骤。

过程

创建 Service Broker 端点

  • 复制以下代码并将其粘贴到查询编辑器窗口中。然后,运行代码为此数据库引擎实例创建 Service Broker 端点。Service Broker 端点建立了 Service Broker 消息发送到的网络地址。该端点使用 Service Broker 默认 TCP 端口 4022,建立将使用 Windows 身份验证连接来发送消息的数据库引擎远程实例。

    Windows 身份验证在两台计算机处于相同的域或可信任域中时有效。如果计算机不在可信任的域中,请将证书安全设置用于端点。有关详细信息,请参阅如何为 Service Broker 传输安全模式创建证书 (Transact-SQL)

    USE master;
    GO
    IF EXISTS (SELECT * FROM master.sys.endpoints
               WHERE name = N'InstTargetEndpoint')
         DROP ENDPOINT InstTargetEndpoint;
    GO
    CREATE ENDPOINT InstTargetEndpoint
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 4022 )
    FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
    GO
    

创建目标数据库、主密钥和用户

  • 复制以下代码并将其粘贴到查询编辑器窗口中。在 CREATE MASTER KEY 语句中更改密码。然后,运行代码以创建用于本教程的目标数据库。默认情况下,新数据库将 ENABLE_BROKER 选项设置为 ON。该代码还会创建用于支持加密和远程连接的主密钥和用户。

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.databases
               WHERE name = N'InstTargetDB')
         DROP DATABASE InstTargetDB;
    GO
    CREATE DATABASE InstTargetDB;
    GO
    USE InstTargetDB;
    GO
    CREATE MASTER KEY
           ENCRYPTION BY PASSWORD = N'<EnterStrongPassword1Here>';
    GO
    CREATE USER TargetUser WITHOUT LOGIN;
    GO
    

创建目标证书

  • 复制以下代码并将其粘贴到查询编辑器窗口中。更改 BACKUP CERTIFICATE 语句中指定的文件名,以引用系统中的某个文件夹。然后,运行代码来创建用于加密消息的目标证书。您指定的文件夹的权限设置应当只允许您的 Windows 帐户和用于运行数据库引擎实例的 Windows 帐户访问该文件夹,其他帐户一概不能访问。为了进行第 2 课,必须手动将 InstTargetCertificate.cer 文件复制到可从发起方实例访问的文件夹。

    CREATE CERTIFICATE InstTargetCertificate 
         AUTHORIZATION TargetUser
         WITH SUBJECT = 'Target Certificate',
              EXPIRY_DATE = N'12/31/2010';
    
    BACKUP CERTIFICATE InstTargetCertificate
      TO FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer';
    GO
    

创建消息类型

  • 复制以下代码并将其粘贴到查询编辑器窗口,然后运行代码为会话创建消息类型。此处指定的消息类型名称和属性必须与下一课在 InstInitiatorDB 中创建的消息类型名称和属性相同。

    CREATE MESSAGE TYPE [//BothDB/2InstSample/RequestMessage]
           VALIDATION = WELL_FORMED_XML;
    CREATE MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
           VALIDATION = WELL_FORMED_XML;
    GO
    

创建约定

  • 复制以下代码并将其粘贴到查询编辑器窗口中。然后,运行代码为会话创建约定。此处指定的约定名称和属性必须与下一课在 InstInitiatorDB 中创建的约定名称和属性相同。

    CREATE CONTRACT [//BothDB/2InstSample/SimpleContract]
          ([//BothDB/2InstSample/RequestMessage]
             SENT BY INITIATOR,
           [//BothDB/2InstSample/ReplyMessage]
             SENT BY TARGET
          );
    GO
    

创建目标队列和服务

  • 复制以下代码并将其粘贴到查询编辑器窗口中。然后,运行代码以创建要用于目标的队列和服务。CREATE SERVICE 语句将该服务与 InstTargetQueue 相关联,以便将所有发送到该服务的消息接收到 InstTargetQueue 中。CREATE SERVICE 还指定只有使用先前创建的 //BothDB/ 2InstSample/SimpleContract 的会话才能将该服务用作目标服务。

    CREATE QUEUE InstTargetQueue;
    
    CREATE SERVICE [//TgtDB/2InstSample/TargetService]
           AUTHORIZATION TargetUser
           ON QUEUE InstTargetQueue
           ([//BothDB/2InstSample/SimpleContract]);
    GO
    

后续步骤

您已经成功创建了将要用于本教程的数据库。接下来,将创建 InstInitiatorDB 并使用支持 Service Broker 会话发起方端点所需的对象来配置它。请参阅第 2 课:创建发起方数据库