sql server 服务器之间传递消息,SQL Server 2008 Service Broker教程 - 无法接收消息(transmission_status中的异常)...
我正在學習如何使用SQL Server 2008 R2的Service Broker.在完成單個數據庫中的完成對話教程時.在第1課之后,我成功創建了消息類型,合同,隊列和服務.在第2課之后,我可能已經發送了這條消息.但是,在嘗試接收消息時,我獲取的是NULL ReceivedRequestMsg而不是發送的內容.
在查看時sys.transmission_queue,transmission_status消息說:
在目標隊列中排隊消息時發生異常.錯誤:15517,狀態:1.無法作為數據庫主體執行,因為主體"dbo"不存在,此類主體不能被模擬,或者您沒有權限.
我已經使用Windows登錄安裝了SQL Server Mycomp\Petr.我也在使用該登錄課程.
你能猜出是什么問題嗎?我應該檢查和設置什么才能使其正常工作?
編輯2012/07/16:為了幫助重現問題,這就是我所做的.如果您按照下一步操作,是否可以重現錯誤?
首先,我使用的是Windows 7 Enterprise SP1和Microsoft SQL Server 2008 R2,開發人員版,64位(版本10.50.2500.0,根目錄位于C:\ Program Files\Microsoft SQL Server\MSSQL10_50.SQL_PRIKRYL05\MSSQL) .
按照教程建議,我下載了AdventureWorks2008R2_Data.mdf示例數據庫,并將其復制到C:\ Program Files\Microsoft SQL Server\MSSQL10_50.SQL_PRIKRYL05\MSSQL\DATA\AdventureWorks2008R2_Data.mdf
必須以"管理員"身份啟動SQL Server Management Studio才能以后附加數據.然后我連接了SQL Server.
右鍵單擊Databases,上下文菜單Attach ...,按鈕Add ...,指向AdventureWorks2008R2_Data.mdf + OK.然后從下面的網格中選擇AdventureWorks2008R2_Log.ldf(報告為未找到)并按下刪除...按鈕.按OK后,附加了數據庫并自動創建了AdventureWorks2008R2_log.LDF.
以下查詢用于查看"Service Broker enabled/disabled",以及啟用(Service Broker已成功啟用數據庫):
USE master;
GO
SELECT name, is_broker_enabled FROM sys.databases;
GO
ALTER DATABASE AdventureWorks2008R2
SET ENABLE_BROKER
WITH ROLLBACK IMMEDIATE;
GO
SELECT name, is_broker_enabled FROM sys.databases;
GO
然后,按照本教程,執行以下查詢以創建消息類型,合同,隊列和服務:
USE AdventureWorks2008R2;
GO
CREATE MESSAGE TYPE
[//AWDB/1DBSample/RequestMessage]
VALIDATION = WELL_FORMED_XML;
CREATE MESSAGE TYPE
[//AWDB/1DBSample/ReplyMessage]
VALIDATION = WELL_FORMED_XML;
GO
CREATE CONTRACT [//AWDB/1DBSample/SampleContract]
([//AWDB/1DBSample/RequestMessage]
SENT BY INITIATOR,
[//AWDB/1DBSample/ReplyMessage]
SENT BY TARGET
);
GO
CREATE QUEUE TargetQueue1DB;
CREATE SERVICE
[//AWDB/1DBSample/TargetService]
ON QUEUE TargetQueue1DB
([//AWDB/1DBSample/SampleContract]);
GO
CREATE QUEUE InitiatorQueue1DB;
CREATE SERVICE
[//AWDB/1DBSample/InitiatorService]
ON QUEUE InitiatorQueue1DB;
GO
到現在為止還挺好.
然后使用以下查詢來查看隊列(使用時現在為空):
USE AdventureWorks2008R2;
GO
SELECT * FROM InitiatorQueue1DB WITH (NOLOCK);
SELECT * FROM TargetQueue1DB WITH (NOLOCK);
SELECT * FROM sys.transmission_queue;
GO
發送消息時會出現問題:
BEGIN TRANSACTION;
BEGIN DIALOG @InitDlgHandle
FROM SERVICE
[//AWDB/1DBSample/InitiatorService]
TO SERVICE
N'//AWDB/1DBSample/TargetService'
ON CONTRACT
[//AWDB/1DBSample/SampleContract]
WITH
ENCRYPTION = OFF;
SELECT @RequestMsg =
N'Message for Target service.';
SEND ON CONVERSATION @InitDlgHandle
MESSAGE TYPE
[//AWDB/1DBSample/RequestMessage]
(@RequestMsg);
SELECT @RequestMsg AS SentRequestMsg;
COMMIT TRANSACTION;
GO
當在隊列看時,Initiator...與Target...隊列是空的,并且可見于所發送的消息sys.transmission_queue經由報告上述的錯誤transmission_status.
總結
以上是生活随笔為你收集整理的sql server 服务器之间传递消息,SQL Server 2008 Service Broker教程 - 无法接收消息(transmission_status中的异常)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 域服务器可以修改ip,Windows S
- 下一篇: 无悔入华夏怎么一直显示服务器,无悔入华夏