我有一个应用程序利用SqlDependency对象来跟踪基础数据库中某些数据表上的更改。正常停止SqlDependency
对于他们的工作以及在大多数情况下,然而,我注意到,当我尝试使用类的静态Stop()
方法杀死的依赖,我得到以下异常:
A severe error occurred on the current command. The results, if any, should be discarded. Operation cancelled by user.
这是对所有的信息运行时提供。在数据库端日志充斥着重复的错误类型:
The query notification dialog on conversation handle '{59CC17D7-DB61-E311-BF57-00151796FDC4}.' closed due to the following error: 8490 Cannot find the remote service 'SqlQueryNotificationService-058a0d35-359a-478e-b227-427d7dabc62c' because it does not exist.
据推测,这是应用程序的结果不正确终止的依赖,并留下通知服务僵尸条目。它似乎没有造成任何不利影响,但对于没有正确终止的每一个客户端来说,日志都会充斥着这些通知错误......更不用说这只是不好的做法。
这是怎么发生的?我认为通过调用Stop(),所有现有的处理来改变事件将被释放。如果情况并非如此,您将如何优雅地释放所有打开的句柄?我不能明确地释放它们,因为对数据的查询是由应用程序动态驱动的;在任何时候我都不知道用户决定采取什么措施。只有他们查询的内容受到依赖关系的约束。
感谢Remus。我很惊讶,在我对这个问题的研究过程中,我没有打你的博客,描述得非常好。 –