我需要实现的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 public
GRANT CREATE QUEUE TO public
GRANT CREATE SERVICE TO public
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO public
GRANT SELECT ON OBJECT::dbo.[User] TO public
GRANT RECEIVE ON QueryNotificationErrorsQueue TO public
使用“山”登录连接
- 使用aspnet_regsql.exe的(
aspnet_regsql.exe -S localhost -E -ed -d TestTable -et -t User
) 添加配置system.webServer在web.config中:
<caching>
<sqlCacheDependency enabled="true">
<databases>
<add name="Tmpl" pollTime="5000" connectionStringName="RepositoryContext"/>
</databases>
</sqlCacheDependency>
</caching>
把SqlDependency.Start()到在Global.asax Application_Start事件
在SQL服务器(SQL Server 2008 Express的,SQL Server 2008中)的不同实例运行
但它并没有帮助。 它仍然无法正常工作。
我如何工作的呢?