我正在构建一个小型 Web应用程序,它本质上将用于调用外部REST / JSON Web服务,传递一些参数并将结果返回给表中的用户。 / p>
我知道来自此外部服务的数据不会经常更改(可能每天一次),我想阻止对同一查询多次调用Web服务。
实现某种缓存的好方法是什么?
目前我把一些东西放在一起(哪种作品,但我觉得这不是正确的方法):
用户输入搜索参数
尝试{LINQ查询从列表中选择结果}
Catch {调用webservice,使用结果填充List,然后重新运行LINQ查询。如果仍然没有结果再抛出异常}
我想我会在一天结束时清空List,所以每天都会重建。
代码有点混乱,但似乎在大部分当时工作 - 有没有更好的方法来实现这个目标?
答案 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方法。