2009-06-19 43 views
1

我們試圖通過遵循MSDN的教程,通過Service Broker在一個SQL Engine中的兩個SQL實例之間進行對話。 爲了簡單起見,我們發送Encryption = OFF的對話框,因此我們不需要處理主密鑰,證書...以及它在本地工作站中工作。Service Broker中的私鑰問題

DECLARE @InitDlgHandle UNIQUEIDENTIFIER; 

DECLARE @RequestMsg NVARCHAR(100);

BEGIN TRANSACTION;

BEGIN DIALOG @InitDlgHandle FROM SERVICE [// InstDB/2InstSample/InitiatorService] TO SERVICE N '// TgtDB/2InstSample/TargetService' ON合同[// 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跟蹤中始終顯示「無法找到私鑰,消息無法傳遞」。

我的問題是,因爲我們設置加密= OFF,爲什麼目標數據庫顯示缺少證書?

我們使用SQL 2005 SP2,Windows 2003

讚賞任何輸入。

+2

如果你真的想知道「爲什麼?」,那麼我很確定Remus是地球上可能真正知道的6人之一。希望他能看到... ...僅供參考,Service Broker至少有十幾個這樣的未記錄(或非常模糊記載)的謎團,而且不像SQLCLR等那樣是一個廣泛普及的功能,MS沒有太多關於如何或爲什麼這些事情成了。他們只是。 – RBarryYoung 2009-06-19 14:24:17

回答

1

說到晚會晚了...
以前沒見過這個帖子。我不知道是否仍然有任何相關性,但這可能是因爲:

REMOTE SERVICE BINDING存在將超過ENCRYPTION = OFF。這是爲了讓開發人員職責與管理員職責分開。如果應用程序需要加密,則開發人員指定ENCRYPTION = ON,管理員必須提供REMOTE SERVICE BINDING。如果應用程序不需要加密,則開發者指定ENCRYPTION = OFF,如果部署站點決定需要加密,即使應用程序不需要加密,管理員可能會提供REMOTE SERVICE BINDING。

A full description of how dialog security and authentication works可在我的網站上找到。