gpt4 book ai didi

ASP.NET 缓存始终返回 null

转载 作者:行者123 更新时间:2023-12-02 12:15:28 24 4
gpt4 key购买 nike

我在 ASP.NET 应用程序中使用 SQLCacheDependency查询通知。我关注了this article成功设置我的数据库。但是,每当我尝试将数据存储在 cache 对象中时。它只是不保存值。它总是 null 。我不是收到任何错误或异常。这是我的代码

Global.asax

void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
System.Data.SqlClient.SqlDependency.
Start(ConfigurationManager.ConnectionStrings["McdConn"].ToString());

}

void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
System.Data.SqlClient.SqlDependency.
Stop(ConfigurationManager.ConnectionStrings["McdConn"].ToString());
}

public static class CacheManagement
{
public static DataTable CreateCache(string cacheName, string tableName, string query)
{
DataTable dtResult = new DataTable();
try
{
string connectionString = ConfigurationManager.ConnectionStrings["McdConn"].ToString();
dtResult = HttpContext.Current.Cache[cacheName] as DataTable;

if (dtResult == null)
{
dtResult = new DataTable();
using (var cn = new SqlConnection(connectionString))
{
cn.Open();
var cmd = new SqlCommand(query, cn);
cmd.Notification = null;
cmd.NotificationAutoEnlist = true;
SqlCacheDependencyAdmin.EnableNotifications(connectionString);
if (!SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionString).Contains(tableName))
{
SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString,tableName);
}

var dependency = new SqlCacheDependency(cmd);
//SqlDataAdapter ad = new SqlDataAdapter(cmd);
//ad.Fill(dsResult);
SqlDataReader reader = cmd.ExecuteReader();
dtResult.Load(reader);
HttpContext.Current.Cache.Insert(cacheName, dtResult, dependency);

}
}
}
catch (Exception ex)
{
Exception_Log.ExceptionMethod("Web", "CacheManagement.cs", "CacheManagement", ex);
}

return dtResult = HttpContext.Current.Cache[cacheName] as DataTable;
}

}

代码隐藏

var dtCachedCategories = HttpContext.Current.Cache["tbl_CategoryMaster_Cached"] as DataTable;
if (dtCachedCategories == null)
{
dtCachedCategories = CacheManagement.CreateCache("tbl_CategoryMaster_Cached","dbo.tbl_CategoryMaster_Languages", "Select * from dbo.tbl_CategoryMaster_Languages");

}

上面总是返回null

谁能帮我指出可能缺少的内容吗?

最佳答案

您可以做很多事情来调试代码并得出结论。您的缓存项目似乎被删除得太频繁了。

1.) 对 Cache.Insert() 使用 CacheItemPriority.NotRemovable 以确保 ASP.NET 不会删除 每当有这样的感觉时,您的元素就会出现。使用解释的 Insert() 方法 here 。检查这个MSDN 文章也是。

2.) 要找出缓存项目被删除的原因,请使用以下命令记录此删除操作 Cache.Insert() 方法的 CacheItemRemovedCallback 委托(delegate)选项。检查这个Insert method overload版本还有这个 link .

3.) 确保您的 dtresult 以及您的 reader 不为空。检查行:

SqlDataReader reader = cmd.ExecuteReader(); & dtResult.Load(reader); 以及您的日志。

4.) 检查您的应用程序池回收时间。这个link包含与应用程序池设置 (IIS 7 +) 相关的所有内容。

5.) 此链接有 IIS 6 应用程序池的解决方案:http://bytes.com/topic/net/answers/717129-c-asp-net-page-cache-getting-removed-too-soon

另外,尝试使用 HttpRuntime.Cache方法看看是否有效。

System.Web.HttpRuntime.Cache.Insert(cacheName, dtResult, dependency);

关于ASP.NET 缓存始终返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18529983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com