如何在C#/ MVC中缓存Web服务结果,而不是一直调用Web服务

时间:2013-01-05 12:44:42

标签: c# web-services caching

我正在构建一个小型 Web应用程序,它本质上将用于调用外部REST / JSON Web服务,传递一些参数并将结果返回给表中的用户。 / p>

我知道来自此外部服务的数据不会经常更改(可能每天一次),我想阻止对同一查询多次调用Web服务。

实现某种缓存的好方法是什么?

目前我把一些东西放在一起(哪种作品,但我觉得这不是正确的方法):

  1. 用户输入搜索参数

  2. 尝试{LINQ查询从列表中选择结果}

  3. Catch {调用webservice,使用结果填充List,然后重新运行LINQ查询。如果仍然没有结果再抛出异常}

  4. 我想我会在一天结束时清空List,所以每天都会重建。

    代码有点混乱,但似乎在大部分当时工作 - 有没有更好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:4)

您可能希望使用一个现有的缓存类来处理过期策略,例如: System.Web.HttpContext.Current.Cache。您可以从查询参数创建缓存键,然后首先在缓存中查找。如果数据不存在,您可以调用Web服务并将结果添加到缓存中,绝对有效期为12小时 - 如果仍然没有结果则抛出异常。

如果你正在使用.Net 4,那么System.Runtime.Caching命名空间中还有一些额外的缓存选项,或者你可以在企业库中找到一个缓存应用程序块。

答案 1 :(得分:1)

您可能希望查看所描述的内置ASP.NET MVC输出缓存功能,例如in this tutorial

简短版本:

只需将[OutputCache(Duration=%duration_in_seconds%, VaryByParam="none")]属性添加到要为其缓存结果的MVC方法。