SignalR SQL Server代理 - 孤立的服务代理队列错误

问题描述:

我正在SQL Server 2008上使用SQL Server代理与SignalR v2.1.2进行扩展。最近发现我们在数据库日志中每天产生50k +错误。经过一番研究,从12月起,有3个孤立的Service Broker队列。错误例如:SignalR SQL Server代理 - 孤立的服务代理队列错误

2016年2月27日23:58:01.79 spid30s活化PROC '[DBO] [SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0]。' 上运行队列“MY_SIGNALR_DB.dbo.SqlQueryNotificationService- 2ffbddba-6ddc-4ad0-88b4-45a405e975e0'输出以下内容:'找不到存储过程'dbo.SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0'。'

这些队列是在12月份创建的,因为某些原因没有被丢弃。如预期的那样,相应的SP显然下降了。数据库每5秒钟会产生一次错误(相当于每天有3个队列的50k)。每个队列都包含一条消息。

问题:

什么能导致这种情况?

是否有额外的SignalR设置可以执行以确保这些清理?

这是SQL Server Service Broker中的错误吗?

是否有一个文档描述了SignalR在队列及其过期方面的预期行为?

谢谢你的时间。

这些是从SqlDependency剩余的。 SqlDependency.Start()的实现是创建一个即时服务,队列和激活的过程(请参见reference source)。这有一些issues,甚至一个简单的Visual Studio debugging会话可能会留下搁浅的队列/激活的过程。

您可以随时清理这些剩余的服务/队列/过程,也可以选择使用较低级别的SqlNotificationRequest类,并自行处理服务/队列部署。选择你的毒药。