0

我有一项服务使用了臭名昭著的“即火即忘”模式(不要评判我,我没有创建它),该服务在 SQL Server 2005 上运行良好。我最近升级到 2012,现在 ssbdiagnose 抱怨激活设置不一致:

The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured but disabled
The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured with 0 max_queue_readers
The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured but no procedure is specified

我试图弄清楚如何解决这个问题,但除了将存储过程添加到“发送”队列之外无法解决,但我不明白为什么这是必要的。

基本设置是:

  1. 插入“扫描到”表格
  2. 触发器调用“发送”服务,如下所示:

    BEGIN DIALOG CONVERSATION @SBDialog FROM SERVICE ScanSendService TO SERVICE 'ScanReceiveService', 'CURRENT DATABASE' ON CONTRACT ScanContract WITH ENCRYPTION = OFF

  3. “接收”服务调用一个存储过程,然后执行不相关的事情。队列详情如下:

    ALTER QUEUE [dbo].[ScanReceiveQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION ( STATUS = ON , PROCEDURE_NAME = [dbo].[usp_Process_ScanReceiveQueue] , MAX_QUEUE_READERS = 1 , EXECUTE AS OWNER ), POISON_MESSAGE_HANDLING (STATUS = OFF)

消息进入“发送”队列就好了,但不是“接收”队列。为什么 ssbdiagnose 抱怨这个问题,我该如何解决?

编辑:更多信息,因为似乎没有人有任何想法:(

我看了看,Microsoft.SqlServer.ServiceBroker.Diagnostics.dll似乎所有这些检查都在每个队列上运行,无论是否“配置了激活”,但我什至不知道如何不配置激活......

如果有人感兴趣,来源:https ://gist.github.com/Mansfield7/5766457#file-gistfile1-cs-L12

编辑 2:我打开了该队列的激活并指定了一个什么都不做的存储过程。ssbdiagnose 错误消失了,但队列仍然损坏(接收队列仍然为空)。

4

1 回答 1

0

为该队列正确添加激活后,ssbdiagnose 错误消失了,但服务仍然无法正常工作。

我附加了 SQL Server 探查器,发现数据库未处于受信任模式,因此我运行了以下命令,它开始工作。

ALTER DATABASE [DBNAME] SET TRUSTWORTHY ON;

我仍然很想知道更多关于激活的 ssbdiagnose 警告,但现在我的问题已经解决了。

于 2013-06-12T19:37:02.530 回答