我有一个由数据库和多个服务组成的应用程序。其中一个服务会将信息添加到数据库中(由用户触发)。
另一个服务会定期查询数据库中的更改,并将新数据用作处理输入。
目前,我使用可配置的定时器大约每30秒查询一次数据库。我了解到Sql 2005具有更改通知功能。然而,在Sql 2008中,此功能已被弃用。
在代码中直接得到有关数据库更改的通知的最佳方法是什么?有哪些最佳实践?
我有一个由数据库和多个服务组成的应用程序。其中一个服务会将信息添加到数据库中(由用户触发)。
另一个服务会定期查询数据库中的更改,并将新数据用作处理输入。
目前,我使用可配置的定时器大约每30秒查询一次数据库。我了解到Sql 2005具有更改通知功能。然而,在Sql 2008中,此功能已被弃用。
在代码中直接得到有关数据库更改的通知的最佳方法是什么?有哪些最佳实践?
通知服务已被弃用,但你也不需要使用它。
在某些情况下,您可以考虑使用Service Broker消息;具体细节取决于您的应用程序。
在大多数情况下,您可能可以使用SqlDependency或SqlCacheDependency。它们的工作方式是:当您发出查询时,将SqlDependency对象与查询一起包含。查询可以是单个SELECT语句或存储过程中的复杂命令组。
稍后,如果另一个Web服务器、用户或Web页面对数据库进行更改,可能会导致上一个查询的结果发生变化,则SQL Server将向所有注册了SqlDependency对象的服务器发送通知。您可以注册代码以在这些事件到达时运行,或者该事件只能清除缓存中的条目。
虽然您需要启用Service Broker才能使用SqlDependency,但您不需要显式地与其交互。但是,您也可以将其用作替代机制;将其视为一种保证消息顺序和单次传递的持久性消息系统。
如何使用这些系统的详细信息有点长,无法在论坛帖子中提供。您可以通过Google搜索,或者我在我的书中提供了示例(Ultra-Fast ASP.NET)。