C# Webservice是否支持多线程?

C# Webservice是否支持多线程?,c#,.net,web-services,C#,.net,Web Services,我构建了一个web服务。此web服务需要缓存数据。数据是对象的列表。根据web方法中传递的参数,数据将被过滤并返回给客户端 public class UpdateService : WebService { public List<object> Get(...) { return Util.Filter(CachingData.Data, ...); } } 公共类更新服务:WebService { 公共列表获取(…) { 返回Util.Filter

我构建了一个web服务。此web服务需要缓存数据。数据是对象的列表。根据web方法中传递的参数,数据将被过滤并返回给客户端

public class UpdateService : WebService
{
   public List<object> Get(...)
   {
      return Util.Filter(CachingData.Data, ...);
   }
}
公共类更新服务:WebService
{
公共列表获取(…)
{
返回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()
    {
        //...
    }
}
公共静态类CachingData
{
公共静态列表数据;//缓存数据
private static System.Threading.Timer tmrGetHSXData=new System.Threading.Timer(DoGethsxEOD,null,0,60*60*1000);
私有静态DoGethsxEOD()
{
//...
}
}
DoGethsxEOD是一种静态方法,每1小时后调用一次以刷新数据。然而,DoGethsxEOD只调用了一次。穿线不起作用

我想缓存此web服务上的数据。每1小时后,将刷新此数据。我使用线程计时器来完成此任务。但是,它不起作用


我不知道webservice是否支持使用线程。请帮助我解决这个问题,以及如何存档我的目的。谢谢。

为什么不使用经典缓存对象并在其上设置一个过期时间(1小时)

您可以在其周围创建一个包装器,将所需的数据存储到缓存中,并使其在1小时后过期

Cache.Insert("CacheItem6", "Cached Item 6",
    null, DateTime.Now.AddHours(1), 
    System.Web.Caching.Cache.NoSlidingExpiration);
有关更多信息:

如果需要缓存。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
}

为什么不使用经典缓存对象并在其上设置过期时间(1小时)

您可以在其周围创建一个包装器,将所需的数据存储到缓存中,并使其在1小时后过期

Cache.Insert("CacheItem6", "Cached Item 6",
    null, DateTime.Now.AddHours(1), 
    System.Web.Caching.Cache.NoSlidingExpiration);
有关更多信息:

如果需要缓存。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
}

你可以给我举个例子。如果缓存对象过期,如何刷新它。谢谢。当缓存过期时,该项将不再存在于缓存中,并将返回null。此时,您可以刷新缓存。您可以在“Get logic”缓存上处理它,每1小时后数据总是新的。如何刷新它。谢谢。不用定时器,你可以将缓存的过期日期设置为1小时。如果没有人调用webservice,缓存将不会被刷新(此时不需要刷新,因为没有人调用webservice)。当第一个请求出现时,您的逻辑将重新激活缓存,缓存过期并将刷新它。我已编辑了我的回答。您可以给我一个示例。如果缓存对象过期,如何刷新它。谢谢。当缓存过期时,该项将不再存在于缓存中,并将返回null。此时,您可以刷新缓存。您可以在“Get logic”缓存上处理它,每1小时后数据总是新的。如何刷新它。谢谢。不用定时器,你可以将缓存的过期日期设置为1小时。如果没有人调用webservice,缓存将不会被刷新(此时不需要刷新,因为没有人调用webservice)。当第一个请求出现时,您的逻辑将重新激活缓存,缓存已过期并将刷新缓存。我已编辑我的答案