首先,确保目标数据库的is_broker_enabled已经enabled。

SELECT name, is_broker_enabled FROM sys.databases

如果不是enabled,使用以下语句

ALTER DATABASE DB_Name SET ENABLE_BROKER
GO

使用以下语句授权指定用户订阅Query Notifications

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain name\user name"

以下是c# 源码

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Caching; public class WebCacheHelper<T> where T : class
{
public event FetchDataFromDBHandler<T> OnFetchDataFromDB; public T GetFromCache(string connectionString, string tableName, string cacheKey)
{
var cache = HttpRuntime.Cache;
T data = null; if (cache[cacheKey] != null)
{
return cache[cacheKey] as T;
} using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd =
new SqlCommand(string.Format("select 1 from dbo.{0}", tableName)
, con))
{
bool started = SqlDependency.Start(connectionString); con.Open();
cmd.Notification = null;
cmd.NotificationAutoEnlist = true; SqlCacheDependencyAdmin.EnableNotifications(connectionString);
if (!SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(
connectionString).Contains(tableName))
{
SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, tableName);
} SqlCacheDependency dependency = new SqlCacheDependency(cmd); if (OnFetchDataFromDB != null)
data = OnFetchDataFromDB(started); cache.Insert(cacheKey, data, dependency); cmd.ExecuteNonQuery();
} return data;
}
} public delegate T FetchDataFromDBHandler<T>(bool IsSqlDependecyStarted);

Sample

    public class Movie
{
public int ID { get; set; }
public string Title { get; set; } [Display(Name = "Release Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; } public string Genre { get; set; }
public decimal Price { get; set; }
} public class MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}     public class MovieController : Controller
{
private MovieDBContext db = new MovieDBContext(); public ActionResult List()
{
WebCacheHelper<IEnumerable<Movie>> helper = new WebCacheHelper<IEnumerable<Movie>>();
helper.OnFetchDataFromDB += x =>
{
var query = from p in db.Movies
select p;
ViewBag.DataInitilized = "Cache data initialized at " + DateTime.Now.ToLongTimeString();
ViewBag.DependencyStarted = x;
return query.ToList();
};
var model = helper.GetFromCache(db.Database.Connection.ConnectionString, "Movies", "Movie");
return View(model);
}
    }

SQL Server2008实测运行成功。 C#代码执行以后,数据库中将自动生成一个名为AspNet_SqlCacheTablesForChangeNotification的表。

原创博文,欢迎转载。转载请注明出处。

基于SqlDependency的Asp.net数据缓存的更多相关文章

  1. cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )

    Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...

  2. 我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)

    [名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化(  ...

  3. SpringMVC + ehcache( ehcache-spring-annotations)基于注解的服务器端数据缓存

    背景 声明,如果你不关心java缓存解决方案的全貌,只是急着解决问题,请略过背景部分. 在互联网应用中,由于并发量比传统的企业级应用会高出很多,所以处理大并发的问题就显得尤为重要.在硬件资源一定的情况 ...

  4. 基于IBM Bluemix的数据缓存应用实例

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:IBM® Data Cache for Bluemix 是快速缓存服务.支持 Web 和 ...

  5. ASP.NET缓存全解析4:应用程序数据缓存 转自网络原文作者李天平

    System.Web.Caching 命名空间提供用于缓存服务器上常用数据的类.此命名空间包括 Cache 类,该类是一个字典,您可以在其中存储任意数据对象,如哈希表和数据集.它还为这些对象提供了失效 ...

  6. SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]

    前言 本文主要是对<ASP.NET 2.0开发指南>——<数据缓存>章节内容的提取并略有补充. 参考资料 1.     <ASP.NET 2.0开发指南> 2.   ...

  7. (转) ASP.NET页面缓存

    原文:http://www.cnblogs.com/Sky_KWolf/archive/2010/12/05/1897158.html 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的 ...

  8. ASP.NET Core 缓存技术 及 Nginx 缓存配置

    前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...

  9. ASP.NET 页面缓存

    ASP.NET 实现页面缓存页面缓存的使用方法非常的简单,只需要在aspx页的顶部加一句声明<%@ OutputCache Duration="60" VaryByParam ...

随机推荐

  1. remeber me即记住我功能

    1.登录过程中的记住我功能如图: 2.这样在登录认证的时候,客户端会传递两个cookie:remember_token和Tsession 3.即使客户端不传递cookie中的Tsession,只传递r ...

  2. selenium firefox设置代理

    from selenium import webdriver profile = webdriver.FirefoxProfile() profile.set_preference('network. ...

  3. README.md文档

    大标题 =================================== 大标题一般显示工程名,类似html的\<h1\> 你只要在标题下面跟上=====即可 中标题 ------- ...

  4. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

  5. 通过java api提交自定义hadoop 作业

    通过API操作之前要先了解几个基本知识 一.hadoop的基本数据类型和java的基本数据类型是不一样的,但是都存在对应的关系 如下图 如果需要定义自己的数据类型,则必须实现Writable hado ...

  6. ANGULARJS: UNDERSTANDING DIRECTIVE SCOPE

    https://www.3pillarglobal.com/insights/angularjs-understanding-directive-scope --------------------- ...

  7. 转:敏捷方式scrum 方案

    http://www.cnblogs.com/taven/archive/2010/10/17/1853386.html 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... ...

  8. 《大话操作系统——做坚实的project实践派》(3)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1ub3M=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  9. HBase伪分布式安装及简单使用

    HBase是Hadoop的数据库,基于Hadoop执行.是一种NoSQL数据库. 特点:分布式.多版本号.面向列的存储模型.可以大规模的数据实时随机读写,可直接使用本地文件系统. 不适合:与关系型数据 ...

  10. 不得不看的Java代码性能优化总结

    原文:https://blog.csdn.net/mr_smile2014/article/details/50112723 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么 ...