【发布时间】:2013-04-07 15:26:40
【问题描述】:
我的 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”中生成新的不死订阅记录)。
这种行为正常吗?可以把东西弄得更整洁吗?
【问题讨论】:
标签: .net sql-server service-broker sqldependency event-viewer