C# Webservice是否支持多线程?
我构建了一个web服务。此web服务需要缓存数据。数据是对象的列表。根据web方法中传递的参数,数据将被过滤并返回给客户端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
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)。当第一个请求出现时,您的逻辑将重新激活缓存,缓存已过期并将刷新缓存。我已编辑我的答案