第 3 课:完成目标对话对象

适用于SQL ServerAzure SQL 托管实例

在本课中,你将学习如何创建链接服务器,并将数据库引擎的目标实例路由到发起程序实例。 从与目标实例在同一台计算机上运行的 Management Studio 副本运行这些步骤。

过程

创建对发起方对象的引用

  • 复制以下代码并将其粘贴到查询编辑器窗口中。 将FROM FILE子句更改为引用您从第 2 课中步骤 4 复制InstInitiatorCertificate.cer文件到的文件夹。 然后,运行代码以创建发起方用户并请求发起方证书。

    USE InstTargetDB;
    GO
    
    CREATE USER InitiatorUser WITHOUT LOGIN;
    
    CREATE CERTIFICATE InstInitiatorCertificate
        AUTHORIZATION InitiatorUser
        FROM FILE = N'C:\storedcerts\$ampleSSBCerts\InstInitiatorCertificate.cer';
    GO
    

创建路由

  • 复制以下代码并将其粘贴到查询编辑器窗口中。 将字符串 MyInitiatorComputer 更改为运行发起程序实例的计算机的名称。 然后,运行代码以创建目标服务和发起程序服务的路由,以及将 发起程序User 与发起程序服务路由关联的远程服务绑定。

    以下 CREATE ROUTE 语句假定目标实例中没有重复的服务名称。 如果目标实例上的多个数据库包含具有相同名称的服务,请使用 BROKER_INSTANCE 子句指定要打开会话的数据库。

    DECLARE @Cmd AS NVARCHAR (4000);
    
    SET @Cmd = N'USE InstTargetDB;
                    CREATE ROUTE InstInitiatorRoute
                    WITH SERVICE_NAME =
                           N''//InstDB/2InstSample/InitiatorService'',
                         ADDRESS = N''TCP://MyInitiatorComputer:4022'';';
    
    EXECUTE (@Cmd);
    
    SET @Cmd = N'USE msdb
                    CREATE ROUTE InstTargetRoute
                    WITH SERVICE_NAME =
                            N''//TgtDB/2InstSample/TargetService'',
                         ADDRESS = N''LOCAL''';
    
    EXECUTE (@Cmd);
    GO
    
    GRANT SEND
        ON SERVICE::[//TgtDB/2InstSample/TargetService] TO InitiatorUser;
    GO
    
    CREATE REMOTE SERVICE BINDING InitiatorBinding
        TO SERVICE N'//InstDB/2InstSample/InitiatorService'
        WITH USER = InitiatorUser;
    GO
    

后续步骤

你已成功配置目标数据库以支持与发起者数据库进行的 Service Broker 对话。 接下来,在发起程序数据库中开始对话,并将请求消息发送到目标服务。