【问题标题】:Web service - cache updateWeb 服务 - 缓存更新
【发布时间】:2012-03-06 16:16:50
【问题描述】:

我正在尝试创建一个缓存其输出内容的 Web 服务。

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

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

Web 服务如何在一段时间后(自行)更新其缓存?

【问题讨论】:

  • 是的。 Web 服务如何在一段时间后(自行)更新其缓存?
  • 在这种情况下为什么要缓存 30 分钟?缓存一天。
  • 缓存时长不是问题。问题是获取数据需要很长时间,如果你是一个不幸的客户端,在缓存被清除后打开页面,你将不得不等待。但是,如果 Web 服务在缓存到期前 5 分钟更新缓存,则此问题将得到解决。

标签: asp.net web-services caching


【解决方案1】:

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

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

计时器的替代方法是使用 Cache 类 - 使用 CacheItemUpdateCallback 在缓存过期后自动刷新(仍然留下一个小窗口,用户可能会在其中调用方法 as它会刷新 - 可能使用 两个 缓存项)。

【讨论】:

  • 根据您的链接,我认为,您不能在网络中使用“System.Windows.Forms.Timer”。我尝试了“System.Timers.Timer”类并使用了 Elapsed 事件,但它并没有击中处理程序。我使用了下面提到的代码。 System.Timers.Timer t = new System.Timers.Timer(); t.Enabled = true; t.Interval = 5000; t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { }
  • 我的第一个想法是使用一个休眠一段时间的新线程,然后开始执行(更新缓存),然后再次休眠。尽管如此,尽管听起来很简单,但实施起来却是一场噩梦。在更新间隔期间共享的所有资源都必须锁定,以便更新。对此有何建议?
  • 无论如何,你能告诉我我应该把计时器的代码放在哪里吗???它应该在方法中,还是在外面的某个地方?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
相关资源
最近更新 更多