我的SqlDependency工作正常,当应用程序退出时,代理队列和服务会被正确删除(我在终止进程之前确实按照建议执行SqlDependency.Stop(...)),但我注意到由SqlDependency创建的通知订阅仍然存在应用程序关闭后在“sys.dm_qn_subscriptions”表中打开。
如果我稍后(应用程序关闭后)执行应该使此订阅触发的条件,它似乎会触发,因为 SQL Server 在事件查看器中记录了一条信息消息,大意是:
'{3F03B693-C0A5-E211-A97B-E06995EBDB20}.'
由于以下错误,对话句柄上的查询通知对话框 已关闭:'<?xml version="1.0"?><Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-8490</Code><Description>Cannot find the remote service 'SqlQueryNotificationService-0ea1f686-e554-4e25-aa7d-4f6d85171cc3' because it does not exist.</Description></Error>'
。
然后从“sys.dm_qn_subscriptions”中删除订阅。
注意:当应用程序处于活动状态时,订阅也会正确触发。就我的应用程序而言,没有任何问题,但让我担心的是,一旦它们所依赖的代理队列/服务终止,订阅就不会在数据库系统表中自动擦除。这可能导致(至少)在数据库中积累大量幻影/不死订阅记录,并在事件查看器中产生不必要的 SQL Server 清理消息(每个应用程序运行都会在“sys.dm_qn_subscriptions”中生成新的不死记录)。
这种行为正常吗?可以让事情变得更整洁吗?