第 1 课:创建目标数据库

适用于SQL ServerAzure SQL 托管实例

在本课中,你将学习如何创建目标数据库和所有不依赖于发起程序数据库的目标对象。 从与数据库引擎的目标实例相同的计算机上运行的 Management Studio 副本运行这些步骤。

过程

创建 Service Broker 端点

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

    Windows 身份验证在两台计算机处于相同的域或可信任域中时有效。 如果计算机不在受信任的域中,请使用终结点的证书安全性。 有关详细信息,请参阅 如何:为 Service Broker 传输安全性创建证书

    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 设置为“打开”。 该代码还会创建用于支持加密和远程连接的主密钥和用户。

    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
    

后续步骤

你已成功为本教程创建数据库。 接下来,使用支持 Service Broker 会话发起程序结束所需的对象创建 InstInitiatorDB 并对其进行配置。