2012-03-06 123 views
0

我正在尝试制作缓存其输出内容的Web服务。Web服务 - 缓存更新

我已经添加了[WebMethod(CacheDuration=1800)],但问题是我希望Web服务在30分钟后自动更新缓存,而无需任何请求。

我使用.net和C#。 Web服务实际上是一个获取xml数据的代理,将其解析并发送给客户端。

Web服务如何在一段时间(本身)后更新缓存?

+1

您有问题要问? – Oded 2012-03-06 16:20:26

+0

是的。 Web服务如何在一段时间后自行更新其缓存? – user1226051 2012-03-06 16:24:31

+0

为什么要在这种情况下缓存30分钟?缓存一天。 – Oded 2012-03-06 16:26:39

回答

0

您可以使用timer classes之一来刷新缓存结果集 - 将其保存在类的字段中。

这样你可以管理缓存而不是IIS。

到定时器的替代方法是使用Cache类 - 使用CacheItemUpdateCallback自动刷新缓存一旦到期(仍留有一个小窗口,用户可以调用该方法它刷新 - 可能使用缓存项目)。

+0

根据你的链接,我认为你不能在web中使用“System.Windows.Forms.Timer”。我尝试了“System.Timers.Timer”类并使用了Elapsed事件,但它没有击中处理程序。我使用了下面提到的代码。 'System.Timers.Timer t = new System.Timers.Timer(); t.Enabled = true; t.Interval = 5000; t.Elapsed + =新System.Timers.ElapsedEventHandler(t_Elapsed);无效t_Elapsed(对象发件人,System.Timers.ElapsedEventArgs E) { }' – Pankaj 2012-03-06 16:50:59

+0

我的第一个想法是使用一个新的线程休眠一段时间,然后开始执行(更新缓存),然后再次睡眠。尽管听起来很简单,但它却是一个噩梦。在更新间隔期间共享的所有资源都必须锁定,以便更新它们。对此有何建议? – user1226051 2012-03-06 17:44:31

+0

恩,我不确定,但我认为你需要t.start()... – user1226051 2012-03-06 17:58:57