中国IT职业教育领先品牌-北大青鸟

18755166091
当前位置:北大青鸟首页 > 青鸟知识库 > java >

ASP.NET SQL缓存依赖(4)

时间:2013-10-11 14:55来源:作者:点击:
使用SQL缓存依赖提高程序性能04 二:使用推SQL缓存依赖 在使用Microsoft SQL Server 2005时,除了轮询SQL缓存依赖,还可以使用推SQL缓存依赖。Microsoft SQL Server 2

  使用SQL缓存依赖提高程序性能04

  二:使用推SQL缓存依赖

  在使用Microsoft SQL Server 2005时,除了轮询SQL缓存依赖,还可以使用推SQL缓存依赖。Microsoft SQL Server 2005包含一个名为查询通知的功能,它在后台使用Microsoft SQL Server 2005的Service Broker。这个Service Broker可以在数据库中的数据变更时自动给应用程序发送一个消息。

  注意 可以用SQL Server Express创建两种类型的数据库:本地和服务器数据库。不应对本地数据库使用推依赖,而是只能对服务器数据库使用推依赖。

  不能使用Visual Web Developer创建一个服务器数据库。只能使用完全功能的Visual Studio 2008或者从Microsoft MSDN网站(msdn.microsoft.com)下载Microsoft SQL Server Management Studio Express来创建服务器数据库。

  相比于轮询SQL缓存依赖,使用推依赖的好处是ASP.NET应用程序不必定时地轮询数据库的修改。如果有修改,数据库会通知应用程序。

  也有不太好的一面,使用推依赖的查询类型有诸多限制。下面是比较显著的一些限制。

  l 查询必须使用两部分的表名(例如,dbo.Movies而不是Movies)。

  l 查询必须包含一个显式的列名列表(不能使用*)。

  l 查询不能引用视图、继承表、临时表或表变量。

  l 查询不能引用大对象类型,如Text、NText和Image列。

  l 查询不能包含子查询、外联结或子联结。

  l 查询不能使用DISTINCT、COMPUTE、COMPUTE BY或者INSERT关键字。

  l 查询不能使用许多聚合函数,包括AVG、COUNT(*)、MAX和MIN。

  这里只是一个不完整的查询限制的列表。要查看完整的列表,可以参考SQL Server 2005在线图书或MSDN网站(msdn.microsoft.com)的“创建一个通知查询”的主题。

  例如,下面这个简单的查询不能工作:

  SELECT * FROM Movies

  该查询不能工作有两个原因。第一是不能使用星号(*)来代表列,第二是必须使用两部分的表名。而下面这个查询就能工作:

  SELECT Title,Director FROM dbo.Movies

  可以对推SQL缓存依赖使用存储过程。不过,每一个存储过程中的SELECT语句必须满足刚才列出的限制列表。

  1. 配置推SQL缓存依赖

  要启用推SQL缓存依赖,必须完成下面两步配置。

  (1)必须配置数据库启用SQL Server 2005 Service Broker。

  必须配置应用程序开始监听通知。

  在这一小节,你将了解到如何完成这两个配置步骤。

  注意 遗憾的是,当推缓存依赖失败时,不会有任何错误报告发送到事件日志。这就使得调试变得极其困难。我建议,完成这一小节讨论的配置修改后,重新启动Web服务器和数据库服务器。

  (1) 为推SQL缓存依赖配置数据库

  在使用推SQL缓存依赖之前,必须启用Microsoft SQL Server 2005 Service Broker。可以执行下面的SQL查询来检查Service Broker是否已经为特定的数据库激活:

  SELECT name, is_broker_enabled FROM sys.databases

  如果Service Broker还没有启用,则要执行ALTER DATABASE命令来启用它。例如,下面的SQL命令为MyMovies数据库启用了Service Broker:

  ALTER DATABASE MyMovies SET ENABLE_BROKER

  最后,ASP.NET进程必须有足够的权限来订阅查询通知。当一个ASP.NET页面由IIS处理时,页面在NT Authority WET WORK SERVICE账号(对于Windows Server 2003或Vista)或者ASPNET账号(对于其他操作系统,如Windows XP)上下文中执行。

  执行下面的SQL命令能给YOURSERVER服务器上的本地ASPNET账号赋予需要的权限:

  GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "YOURSERVER\ASPNET"

  当使用Visual Web Developer的Web服务器来请求一个ASP.NET页面时,ASP.NET页面在当前用户账号的安全上下文中执行。因此,当使用文件系统网站时,需要对当前账号执行SUBSCRIBE QUERY NOTIFICATIONS来授权。

  注解 推SQL缓存依赖并不使用SQL Server 2005的通知服务。

  (2) 为推SQL缓存依赖配置应用程序

  在应用程序可以接收到变更通知之前,必须启用查询通知监听器。可以在如代码清单4-45所示的Global.asax文件中启用监听器。

  代码清单4-45 Global.asax

<%@ Application Language=”C#” %>
 
<%@ Import Namespace=”System.Data.SqlClient” %>
 
<%@ Import Namespace=”System.Web.Configuration” %>
 
<script runat=”server”>
 
    void Application_Start(object sender, EventArgs e)
 
    {
 
        // Enable Push SQL cache dependencies
 
        string conString = WebConfigurationManager.ConnectionStrings
 
        ["MyMovies"].ConnectionString;
 
        SqlDependency.Start(conString);
 
    }
 
</script>
 

  Application_Start事件处理程序只在应用程序刚开始运行时执行一次。在代码清单4-45中,SqlDependency.Start()方法使用一个指向SQL Express的MyMovies服务器数据库的连接字符串调用。

相关文章


  • 北大青鸟协同校区(农大校区):安徽省合肥市蜀山区长江西路130号安农大科技长廊5楼
    三孝口校区:安徽省合肥市庐阳区安庆路233号建材大厦5楼
    咨询电话:0551-62832238 0551-62382237
    面授课程:Java培训、Accp、启蒙星
  • 扫码关注北大青鸟