我正在尝试使用SqlCacheDependency来允许我在设置表中的某个键更改时使我的Web应用程序的应用程序缓存无效。对我来说,一切似乎都是正确的代码,注册依赖项时没有错误:
CacheItemRemovedCallback onCacheItemRemoved = new CacheItemRemovedCallback(CacheItemRemoved);
lock (_cacheLock)
{
using (var connection = new SqlConnection(_connectionString))
{
var command = new SqlCommand("SPNameHere", connection)
{
CommandType = CommandType.StoredProcedure
};
command.Parameters.AddWithValue("@Context", context.ToString());
var dependency = new SqlCacheDependency(command);
connection.Open();
command.ExecuteNonQuery();
HttpRuntime.Cache.Insert(GetKey(context), value, dependency, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(24), CacheItemPriority.Default, onCacheItemRemoved);
}
}
我正在运行的SP是非常基本的(我甚至尝试过没有WHERE,但有同样的问题):
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET NUMERIC_ROUNDABORT OFF
SET ARITHABORT ON
SELECT
Value
FROM
[dbo].[tb_SystemSettings]
WHERE
'SomePrefixText_' + @Context = Key
当我查看SQL事件探查器时,我可以看到有6个事件被提出。 5正在
3 - 订阅被解雇
最后一个是
1 - 已注册订阅
错误的事件文本包含:
ID =" 0"类型="订阅"源="声明"信息="无效" database_id的=" 0"
这表明SP存在问题,但我不能为我的生活找出问题所在。所有结果都是我对CacheItemRemoved的回调被不断调用,原因是DependencyChanged。我已经浏览了网页,看看问题可能是什么,但它们似乎都没有我在这里遇到的问题。
我有什么遗漏吗?任何帮助将不胜感激!
更新:
我尝试注册查询文本,而不是SP调用,我只获得了Subscription注册事件,但是一行上的运行和UPDATE花了近2分钟(表中只有6行),并且分析器显示改变事件不断发射。什么可能导致这个?桌子上没有触发器或类似的东西。