我需要为将依赖于此查询的表实现 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
使用“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)
但它没有帮助。它仍然不起作用。
我如何使它工作?