我们正尝试通过MSDN中的教程,通过Service Broker在一个SQL引擎中的两个SQL实例之间进行对话。 为了简单起见,我们发送带有Encryption = OFF的对话框,这样我们就不需要处理Master密钥,证书......它可以在本地工作站上运行。
DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
DECLARE @RequestMsg NVARCHAR(100);
BEGIN TRANSACTION;
BEGIN DIALOG @InitDlgHandle FROM SERVICE [// InstDB / 2InstSample / InitiatorService] 服务N'// TgtDB / 2InstSample / TargetService' ON CONTRACT [// BothDB / 2InstSample / SimpleContract] WITH ENCRYPTION = OFF;
SELECT @RequestMsg = N'Message for Target service。';
发送对话@InitDlgHandle 消息类型[// BothDB / 2InstSample / RequestMessage] (@RequestMsg);
SELECT @RequestMsg AS SentRequestMsg;
COMMIT TRANSACTION; GO
但是,移动到服务器后,使用相同的脚本,目标数据库在initDB发出消息后,在SQL跟踪中不断显示“无法找到私钥,消息无法传递”。
我的问题是,因为我们设置加密=关闭,为什么目标数据库显示缺少证书?
我们使用SQL 2005 SP2,Windows 2003
赞赏任何输入。
答案 0 :(得分:1)
谈到晚会迟到......
之前没见过这篇文章。我不知道是否仍有任何相关性,但这可能是原因:
REMOTE SERVICE BINDING存在将胜过ENCRYPTION = OFF。这是为了允许开发人员职责与管理员职责分开。如果应用程序需要加密,则开发人员指定ENCRYPTION = ON,管理员必须提供REMOTE SERVICE BINDING。如果应用程序不需要加密,则开发人员指定ENCRYPTION = OFF,如果部署站点决定需要加密,则管理员可能提供远程服务绑定,即使应用程序不需要加密。
我的网站上可以找到full description of how dialog security and authentication works。