日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql server 服务器之间传递消息,SQL Server 2008 Service Broker教程 - 无法接收消息(transmission_status中的异常)...

發布時間:2024/4/14 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的异常)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。