【发布时间】:2013-04-29 07:25:24
【问题描述】:
我需要为一个依赖于这个查询的表实现 SqlCacheDependency:
SELECT Nickname FROM dbo.[User].
我为此创建了一个方法:
private IEnumerable<string> GetNicknamesFromCache()
{
const String cacheValueName = "Nicknames";
var result = HttpRuntime.Cache.Get(cacheValueName) as List<String>;
if (result == null)
{
result = _repository.GetAllNicknames();
var connectionString = ConfigurationManager.ConnectionStrings["RepositoryContext"].ConnectionString;
var sqlConnection = new SqlConnection(connectionString);
var sqlCommand = new SqlCommand("SELECT Nickname FROM dbo.[User]", sqlConnection);
var sqlDependency = new SqlCacheDependency(sqlCommand);
HttpRuntime.Cache.Insert(cacheValueName, result, sqlDependency);
}
return result;
}
但是当我运行我的应用程序时它不起作用。
我查看了订阅者列表(sys.dm_qn_subscriptions 表),没有任何记录。
我调查了很多时间,并且已经尝试了各种解决方案,但它们对我不起作用:
-
使用可信连接并为公共角色设置一些权限:
GRANT CREATE PROCEDURE TO publicGRANT CREATE QUEUE TO publicGRANT CREATE SERVICE TO publicGRANT SUBSCRIBE QUERY NOTIFICATIONS TO publicGRANT SELECT ON OBJECT::dbo.[User] TO publicGRANT RECEIVE ON QueryNotificationErrorsQueue TO public 使用“sa”登录进行连接
- 使用 aspnet_regsql.exe (
aspnet_regsql.exe -S localhost -E -ed -d TestTable -et -t User) -
在 web.config 中向 system.webServer 添加配置:
<caching><sqlCacheDependency enabled="true"><databases><add name="Tmpl" pollTime="5000" connectionStringName="RepositoryContext"/></databases></sqlCacheDependency></caching> 将 SqlDependency.Start() 放入 Global.asax Application_Start 事件中
在不同的 sql server 实例上运行(SQL Server 2008 Express、SQL Server 2008)
但这没有帮助。还是不行。
如何让它发挥作用?
【问题讨论】:
标签: c# .net sql-server caching service-broker