新建日期: 2007 年 9 月 15 日
在本课中,您将学习如何创建发起方数据库和在本教程中使用的所有发起方 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 sys.endpoints WHERE name = N'InstInitiatorEndpoint') DROP ENDPOINT InstInitiatorEndpoint; GO CREATE ENDPOINT InstInitiatorEndpoint 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'InstInitiatorDB') DROP DATABASE InstInitiatorDB; GO CREATE DATABASE InstInitiatorDB; GO USE InstInitiatorDB; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'<EnterStrongPassword2Here>'; GO CREATE USER InitiatorUser WITHOUT LOGIN; GO
创建发起方证书
- 复制以下代码并粘贴至查询编辑器窗口中。 更改 BACKUP CERTIFICATE 语句中指定的文件名,以引用系统中的某个文件夹。 然后,运行代码以创建用于加密消息的发起方证书。 您指定的文件夹的权限设置应当可以阻止除您的 Windows 帐户和用于运行数据库引擎实例的 Windows 帐户以外的其他帐户访问该文件夹。 为便于第 3 课的操作,您必须将 InstInitiatorCertificate.cer 文件手动复制到可以从目标实例访问的文件夹。 - CREATE CERTIFICATE InstInitiatorCertificate AUTHORIZATION InitiatorUser WITH SUBJECT = N'Initiator Certificate', EXPIRY_DATE = N'12/31/2010'; BACKUP CERTIFICATE InstInitiatorCertificate TO FILE = N'C:\storedcerts\$ampleSSBCerts\InstInitiatorCertificate.cer'; GO
创建消息类型
- 复制以下代码并粘贴至查询编辑器窗口中。 然后,运行代码以创建会话的消息类型。 此处指定的消息类型名称和属性必须与上一课 InstTargetDB 中创建的消息类型名称和属性相同。 - 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 语句可将服务与 InstInitiatorQueue 关联起来。 因此,所有发送至该服务的消息都将被接收到 InstInitiatorQueue 中。 CREATE SERVICE 还指定只有使用先前创建的 //BothDB/ 2InstSample/SimpleContract 的会话才能将该服务用作目标服务。 - CREATE QUEUE InstInitiatorQueue; CREATE SERVICE [//InstDB/2InstSample/InitiatorService] AUTHORIZATION InitiatorUser ON QUEUE InstInitiatorQueue; GO
创建对目标对象的引用
- 复制以下代码并粘贴至查询编辑器窗口中。 更改 FROM FILE 子句,以引用在第 1 课的步骤 3 中将 InstTargetCertficate.cer 文件复制到其中的文件夹。 然后,运行代码以创建目标用户并获取目标证书。 - CREATE USER TargetUser WITHOUT LOGIN; CREATE CERTIFICATE InstTargetCertificate AUTHORIZATION TargetUser FROM FILE = N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer' GO
创建路由
- 复制以下代码并粘贴至查询编辑器窗口中。 将字符串 MyTargetComputer 更改为运行目标实例的计算机的名称。 然后,运行代码以创建到目标服务和发起方服务的路由以及将 TargetUser 与目标服务路由关联的远程服务绑定。 - 以下 CREATE ROUTE 语句假定目标实例中没有重复的服务名称。 如果目标实例中的多个数据库包含同名服务,请使用 BROKER_INSTANCE 子句指定要在其中打开会话的数据库。 - DECLARE @Cmd NVARCHAR(4000); SET @Cmd = N'USE InstInitiatorDB; CREATE ROUTE InstTargetRoute WITH SERVICE_NAME = N''//TgtDB/2InstSample/TargetService'', ADDRESS = N''TCP://MyTargetComputer:4022'';'; EXEC (@Cmd); SET @Cmd = N'USE msdb CREATE ROUTE InstInitiatorRoute WITH SERVICE_NAME = N''//InstDB/2InstSample/InitiatorService'', ADDRESS = N''LOCAL'''; EXEC (@Cmd); GO CREATE REMOTE SERVICE BINDING TargetBinding TO SERVICE N'//TgtDB/2InstSample/TargetService' WITH USER = TargetUser; GO
后续步骤
您已成功创建将用于本教程的发起方数据库。 下一步将创建与发起方对象存在依赖关系的目标对象,从而完成对目标数据库的配置。 请参阅第 3 课:完成目标会话对象。
请参阅
其他资源
BACKUP CERTIFICATE (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CREATE CONTRACT (Transact-SQL)
CREATE DATABASE (Transact-SQL)
CREATE ENDPOINT (Transact-SQL)
CREATE MASTER KEY (Transact-SQL)
CREATE MESSAGE TYPE (Transact-SQL)
CREATE QUEUE (Transact-SQL)
CREATE REMOTE SERVICE BINDING (Transact-SQL)
CREATE ROUTE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
CREATE USER (Transact-SQL)
EXECUTE (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
Service Broker 对话安全模式
会话体系结构
服务体系结构