WCF 缓存列表错误
本文关键字:错误 列表 缓存 WCF | 更新日期: 2023-09-27 18:36:59
我正在尝试缓存从WCF中的SQL Server检索的动态列表,到目前为止检索过程工作正常,我已经对其进行了测试,完全没有问题,问题是当我尝试缓存此检索到的列表时,发生错误,我无法找出其背后的原因。
这是我的方法:
public List<ErrorEntities> GetALL()
{
List<ErrorEntities> res = null;
if (HttpContext.Current.Cache["GetALL"] == null)
{
SqlCommand com = Global.GetCommand("select * from [BlockingList]");
com.Connection.Open();
SqlDataReader reader = com.ExecuteReader();
res = Fill(reader);
HttpContext.Current.Cache.Add("GetALL", res, null, DateTime.Now.Add(new TimeSpan(0, 0, 15)), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
com.Connection.Close();
return res;
}
else
{
res = HttpRuntime.Cache["GetALL"] as List<ErrorEntities>;
return res;
}
}
我试图通过添加以下代码行来启用 web.config 文件上的缓存,但问题也没有解决:
<scriptResourceHandler enableCompression="true" enableCaching="true" />
这是我编译解决方案时遇到的错误:
由于内部错误,服务器无法处理请求。 有关错误的详细信息,请打开 IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute 或从配置行为)在服务器上 为了将异常信息发送回客户端,或打开 根据 .NET Framework 3.0 SDK 文档Microsoft进行跟踪,以及 检查服务器跟踪日志。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more
有关错误及其在代码中起源位置的信息。
Exception Details: System.ServiceModel.FaultException: The server was unable to process the request due to an internal error. For more
有关错误的信息,请打开 IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute 或从配置行为)在服务器上 为了将异常信息发送回客户端,或打开 根据 .NET Framework 3.0 SDK 文档Microsoft进行跟踪,以及 检查服务器跟踪日志。
Source Error: Line 113: Line 114: public ServiceReference1.ErrorEntities[] GetALL() { Line 115: return base.Channel.GetALL(); Line 116: } Line 117:
我假设有问题的代码是在 WCF 方法中调用的。
WCF 在其自己的上下文中工作,不应在此处使用HttpContext.Current
。
Microsoft添加了在 .NET 4.0 中没有System.Web
依赖项的新缓存。
MemoryCache
在 WCF 中应该可以正常工作。
尝试使用以下代码获取缓存对象:
ObjectCache cache = MemoryCache.Default;
http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx
我还建议对一次性资源使用 using
或 try-finally
块(代码示例中Connection
)