使用Sql Server 2008更改通知
我有一个由数据库和多个服务组成的应用程序。 其中一项服务向数据库添加信息(由用户触发)。
另一项服务定期查询数据库中的更改,并将新数据用作处理的输入。
到现在为止,我使用了一个可配置的计时器,每隔30秒左右查询一次数据库。 我阅读了关于更改通知的Sql 2005。 但是,在Sql 2008中,此功能已被弃用。
直接在代码中获取数据库中发生的更改的最佳方式是什么? 什么是最佳实践?
Notification Services已被弃用,但您仍然不想使用它。
在某些情况下,您可能会考虑Service Broker消息; 细节取决于你的应用程序。
在大多数情况下,您可以使用SqlDependency或SqlCacheDependency。 他们的工作方式是当你发出一个包含你的查询的SqlDependency对象时。 查询可以是单个SELECT或存储过程中的一组复杂命令。
过了一段时间,如果另一个Web服务器或用户或网页对数据库进行更改(可能导致前一个查询的结果发生更改),则SQL Server将向所有已注册SqlDependency对象的服务器发送通知。 您可以注册代码以在这些事件到达时运行,或者事件可以简单地清除缓存中的条目。
尽管您需要启用Service Broker来使用SqlDependency,但您不需要明确地与它进行交互。 但是,您也可以将其用作替代机制; 把它看作一个持久的消息系统,保证消息顺序和一次性交付。
关于如何使用这些系统的细节对于论坛帖子有点长。 您可以为他们提供Google,也可以在我的书(超快速ASP.NET)中提供示例。
是的,这篇博客文章解释说,Notification Services现在已被弃用,以及替代品或替代品将来会如何。
出于您的目的 - 获取数据库中发生的更改的通知 - 听起来像您想要SQL Server更改跟踪。 但通知是一个拉模型 - 您的应用程序必须在更改表上执行查询。
我无法弄清楚SqlDependency是否继续与Notification Services一起使用。
有很多不同的方式来跟踪数据库中的变化:或者通过维护时间结构的触发器(如积压,跟踪日志(又名'审计表')或使用SQL 2008中的变更跟踪工具作为另一个答案中的参考。 不管你使用什么机制,你都有通知你的本地服务这个变化的问题。 为此,您可以使用Service Broker和基于事件的激活。 从你描述的内容来看,似乎让应用程序等待队列中的事件。 http://msdn.microsoft.com/en-us/library/ms171581.aspx
如果您不希望让服务处于闲置状态并睡在队列中,则可以通过使用服务代理中的外部激活机制来调查将服务启动为“按需”生活。
链接地址: http://www.djcxy.com/p/60273.html