深入剖析ASP.NET 2.0缓冲机制(2)

三、在SqlDataSource控件中的SQL缓存无效

到目前为止,你已看到了如何使基于在SqlDataSource控件中的CacheDuration属性中设定的持续时间值缓存无效。在本节中,我 将解释基于SQL Server表中的数据实现一个缓存无效机制的步骤。这种缓存无效机制是ASP.NET 2.0的一个新特征,这时一个缓冲页面或一个数据源控件能够被绑定到一个SQL Server数据库中的某一个特定表上。一旦你实现这种初始化的关联操作,那么,改变该表的内容将导致缓冲的对象自动无效。

【建议】当你需要在多个页面中使用相同的数据库数据时,你应该考虑使用数据源控件的SQL缓存无效机制。

其实,基于SQL Server的缓存无效机制适用于SQL Server 7.0及以上版本;但是,SQL Server 7.0和2000仅支持表级的缓存无效机制。这意味着,当任何时间表中的数据改变时,缓冲的项被自动地无效。SQL Server 2005还提供了一种行级缓存无效机制,这可以在一种更细的级别上来控制缓冲数据。

在SQL Server 7和SQL Server 2000中,表级缓存无效是通过使用一种查询系统(一个特定的ASP.NET进程)支持的。该进程每隔特定的时间查询数据库(“拉”模型)以监视自从上次 被检查以来哪些表发生了变化。尽管这种拉模型能够适合于大多数情形,但是它并不是一种非常有效的方法。幸好,这种情形在SQL Server 2005中得到了大大增强—无论何时修改一个特定的数据行,实际上都由SQL Server负责通知(推模型)ASP.NET。SQL Server 2005通过使用一个称为通知提交服务(Notification Delivery Services,它使用80端口)的特征实现这一功能,该服务能够直接与IIS6.0的HTTP.SYS进行交互以通知Web服务器更新特定的行。接下 来,我将解释如何为SQL Server 7和2000版本配置缓冲。

在你能够使用SQL Server 7或SQL Server 2000建立缓存依赖性之前,你需要完成下列步骤:

◆配置SQL Server以支持SQL缓存无效。这只需要一次性建立你想监视的SQL Server数据库中的表或数据库即可。

◆把必要的配置信息添加到web.config文件。

下面,让我们详细分析上面的步骤。首先,我们来看一下SQL Server的配置问题。

四、配置SQL Server以支持SQL缓存无效

你可以以下列两种方式实现SQL Server 2000配置以支持SQL缓存无效:

1.使用aspnet_regsql工具;

2.使用SqlCacheDependencyAdmin类的EnableTableForNotifications方法。

在本文中,我们仅考虑第一种方法。上面的aspnet_regsql工具负责创建另外一个表 AspNet_SqlCacheTablesForChangeNotification,用于跟踪改变数据库中的所有被监视的表的变化;它还创建一组触 发器和存储过程来支持这种能力。为了运行aspnet_regsql工具,只需打开Visual Studio命令提示行,然后输入类似下列的命令:

运行正常的话,应该显示如下:

该命令使Pubs数据库支持SQL缓存无效功能。其中:

◆S—服务器名

◆U—用于连接到SQL Server的用户ID

◆P—用于连接到SQL Server的用户口令

◆d—数据库名

◆ed—支持该数据库具有SQL Server触发的缓存无效功能

一旦在数据库级上完成上面的操作,接下来,你需要在单个表级上启动缓存无效功能。具体实现请参考下列命令:

运行正常的话,应该显示如下:

在上面的命令中:

◆t—指定表的名称

◆et—支持该表具有SQL Server触发的缓存无效功能

上面的命令展示了如何为Pubs数据库中的authors表启动SQL缓存无效支持。一旦你配置好authors表可以发送通知,那么,任何时候该表中的数据变化时,它都会通知ASP.NET使位于缓存中的相应的项无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值