我构建了一个Web服务。此Web服务需要缓存数据。数据是对象列表。依赖于Web方法中传递的参数,数据将被过滤并返回给客户端。
public class UpdateService : WebService
{
public List<object> Get(...)
{
return Util.Filter(CachingData.Data, ...);
}
}
我需要缓存此数据,并且必须在每1小时后刷新(续订)。我构建了一个名为CachingData的静态类。在这个类中,我创建了一个静态线程计时器:
public static class CachingData
{
public static List<object> Data; // cached data
private static System.Threading.Timer tmrGetHSXData = new System.Threading.Timer(DoGethsxEOD, null, 0, 60*60*1000);
private static DoGethsxEOD()
{
//...
}
}
DoGethsxEOD是一种静态方法,每1小时后调用一次以刷新数据。但是,DoGethsxEOD只调用了一次。线程无效。
我想在此网络服务上缓存数据。每1小时后,这些数据将被刷新。我使用线程计时器来完成这项任务。但是,它不起作用。
我不知道webservice有使用线程的支持。请帮我解决这个问题,以及如何归档我的目的。感谢。
答案 0 :(得分:3)
为什么不使用Classic Cache对象并在其上设置过期(1小时)白天?
你可以在它周围创建一个包装器,将你需要的数据存储到缓存中并在1小时后使其过期
Cache.Insert("CacheItem6", "Cached Item 6",
null, DateTime.Now.AddHours(1),
System.Web.Caching.Cache.NoSlidingExpiration);
了解更多信息:
http://msdn.microsoft.com/en-us/library/18c1wd61%28v=VS.100%29.aspx
如果你想要Cache.Insert,你也可以传递一个可以用来自动刷新你的缓存的回叫代理:
Cache.Insert("MyText", someTextVariable, null, DateTime.Now.AddHours(1),
TimeSpan.Zero, CacheItemPriority.High,
new CacheItemRemovedCallback(ItemRemoved))
public void ItemRemoved(string key, object value, CacheItemRemovedReason reason)
{
// write your refresh logic
}