Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 带有Sql Server 2005的Service Broker-消息卡在队列中_Sql Server 2005_Queue_Service Broker - Fatal编程技术网

Sql server 2005 带有Sql Server 2005的Service Broker-消息卡在队列中

Sql server 2005 带有Sql Server 2005的Service Broker-消息卡在队列中,sql-server-2005,queue,service-broker,Sql Server 2005,Queue,Service Broker,我正在配置一个简单的ServiceBroker实现。在本地,我们使用SQLServer2008Express,一切正常。一旦代码在我们的生产服务器(SQLServer2005)上运行,消息就会卡在接收方队列中。以下代码不完整,但说明了队列和服务的基本配置方式: -- Create message type to validate the content of a message CREATE MESSAGE TYPE MyMessageType VALIDATION = NONE; -- Cr

我正在配置一个简单的ServiceBroker实现。在本地,我们使用SQLServer2008Express,一切正常。一旦代码在我们的生产服务器(SQLServer2005)上运行,消息就会卡在接收方队列中。以下代码不完整,但说明了队列和服务的基本配置方式:

-- Create message type to validate the content of a message
CREATE MESSAGE TYPE MyMessageType VALIDATION = NONE;

-- Create contract to validate what direction messages can be sent in a conversation.
CREATE CONTRACT MyContract 
(
    MyMessageType SENT BY INITIATOR
) 

-- The receiver queue will process each message using the 'spProcessMessage' stored procedure
CREATE QUEUE [MyReceiverQueue];
ALTER QUEUE [MyReceiverQueue] WITH ACTIVATION 
(
      STATUS = ON,
      MAX_QUEUE_READERS = 1,
      PROCEDURE_NAME = spProcessMessage,
      EXECUTE AS SELF
);

-- The receiver service processes the incoming messages and passes them to the ReceiverQueue.
CREATE SERVICE [MyReceiverService] ON QUEUE [MyReceiverQueue]([MyContract]);

-- Queue and service to send the message from
CREATE QUEUE [MySenderQueue];
CREATE SERVICE [MySenderService] ON QUEUE [MySenderQueue];
安装服务后,将通过以下方式触发消息:

-- Send a message to the receiver queue
DECLARE @MessageBody XML
SET @MessageBody = ''; 
DECLARE @Handle UNIQUEIDENTIFIER;
BEGIN DIALOG CONVERSATION @Handle
FROM SERVICE [MySenderService]
TO SERVICE 'MyReceiverQueue'
ON CONTRACT [MyContract]
WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @Handle 
MESSAGE TYPE [MyMessageType](@MessageBody);
所有消息都卡在“MyReceiverQueue”中。如果我手动执行“spProcessMessage”,消息将正常处理

更多细节:
-sys.transmission_队列为空
-sys.conversation_端点表示两个服务都在“转换”
-代理已启用,数据库配置为与SQL 2005兼容

你知道为什么这些信息不会被自动处理吗

非常感谢您抽出时间

--

好的,在玩了一会儿之后,我开始工作了。如Remus所述,它位于以下位置:C:\Program Files\Microsoft SQL Server\100\Tools\Binn。我通过这种方式使其在本地工作:

ssbdiagnose -E -S "JDECUPER\SQLEXPRESS" -d mydb CONFIGURATION FROM SERVICE MySenderService TO SERVICE MyReceiverService ON CONTRACT MyContract
然后,我在我们的生产服务器上进行了尝试:

ssbdiagnose -XML -U loginID -P pwd -S "machine's IP" -d mydb CONFIGURATION FROM SERVICE MySenderService TO SERVICE MyReceiverService ON CONTRACT MyContract > C:\testBrokerService.xml
检测到第一个错误

Service Broker GUID is identical to that of database Pandilla on server 200.57.141.193
服务器上的另一个数据库具有与service broker相同的GUID。我只需重新生成GUID:

ALTER DATABASE [myotherdb] SET NEW_BROKER;
第二个错误与用户执行存储过程的权限有关:

The EXECUTE AS for the user dbo specified for activation on queue dbo.AlbumGanadoresQueue cannot be impersonated due to an exception
升级这些权限后,一切都开始正常工作

非常感谢雷姆斯为我指明了正确的方向。我的时间有点长,但我希望详细信息能帮助其他开发者。

首先,请阅读我网站上的指南,并按照指南一步一步地进行操作,直到找到可能的问题。

其次,如果您有权访问SQL 2008部署,请从中运行该工具。虽然是SQL 2008的一部分,但它也完全能够诊断SQL 2005。如果您有权访问SQL 2k8部署,这也是首选方法。

Hi Remus!我希望你能看到我的问题,因为你的文章在配置我的服务方面帮了我很多忙:)我看了你的疑难解答页面。“sys.transmission_queue”表始终为空,这意味着发件人能够发送消息。关于接收器的确认,我执行了函数“get_transmission_status”,但结果也是空的。我没有安装探查器或SQL 2k8部署。是否有其他实用程序/方法来诊断出问题?谢谢。2k8?ssbdiagnose是你的朋友。我相信是在\program files\microsoft sql server\10\b中。运行SSBDIAGNOSE-E连接到-S连接到-S。你可以从另一台可以连接到服务器的机器上远程运行它。你也可以使用我网站上的联系人表单直接给我写信