Webservice是否支持多线程?

时间:2011-09-16 10:19:27

标签: c# .net web-services

我构建了一个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有使用线程的支持。请帮我解决这个问题,以及如何归档我的目的。感谢。

1 个答案:

答案 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
}