ADO.NET 2.0中的查询通知
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:学习如何使用ADO.NET 2.0和SQL Server 2005中新的通知技术处理即席数据刷新。
2.提交查询的用户必须具有订阅查询通知的权限。权限授予是在每个数据库级别上配置的;下面的DDL语句将授予用户'bob'在当前数据库中订阅的权限:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO bob
将通知发送给最终用户或者缓存
到目前为止,我们已经提交了正确的附带通知请求的查询到SQL Server。SQL Server在行集上进行监视,如果任何用户改变了行集,一条消息就被发送到我们选择的SERVICE。现在该做些什么呢?您可以自己编写代码负责在通知产生时读取消息并执行自定义的处理逻辑;或者您也可以使用内置的分发器替您进行处理。那么,让我们来看看分发器。
除非指定了自定义的SERVICE,否则查询通知将使用MSDB数据库中内置的名为http://schemas.microsoft.com/SQL/Notifications/QueryNotificationService作为默认的SERVICE。当消息到达该SERVICE的队列时,与队列关联的sp_DispatcherProc系统存储过程自动对消息进行处理。有意思的一点是该存储过程使用了.NET编写的代码,因此必须在SQL Server 2005实例上启用“加载NET公共语言运行时(CLR)”,自动的查询通知投递才能工作。(可以在每个SQL Server实例上启用或禁用“加载.NET CLR”)
当查询通知消息到达时,sp_DispatcherProc (从现在起,我将它称为“分发器”)检查SqlDependency通知队列中的查询通知订阅列表,然后将消息发送给每个订阅者。注意:使用分发器的时候,是由服务器将数据改变的通知告知客户端的。这样做有两个好处:客户端无须对通知进行轮询,客户端无须建立和SQL Server的连接就可以接收通知。分发器使用HTTP协议或者TCP或者私有协议将通知发送给每个订阅者。可以选择是否对服务器-客户端通信进行身份验证。通知投递到订阅者后,就从活动的订阅列表中删除该订阅。记住:每个客户端的订阅只能接收一条通知;这取决于客户端是否重新提交查询以及重新订阅。
来源:51CTO 责编:豆豆技术应用