新建日期: 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 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 课:创建发起方数据库。
请参阅
其他资源
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 SERVICE (Transact-SQL)
CREATE USER (Transact-SQL)
Service Broker 对话安全模式
会话体系结构
服务体系结构