如何在c# / MVC中缓存web服务而不是一直调用web服务

本文关键字:web 服务 调用 一直 缓存 MVC | 更新日期: 2023-09-27 17:50:42

我正在构建一个小的 web应用程序,主要用于调用外部REST/JSON web服务,传递一些参数并将结果返回给表中的用户。

我知道来自这个外部服务的数据不会经常改变(也许一天一次),我想防止为相同的查询调用web服务很多次。

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

此刻,我把一些东西放在一起(这是一种工作,但我认为不是正确的方式):

  1. 用户输入搜索参数

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

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

我想我会在一天结束时清空列表,这样每天它都会重新创建。

代码有点乱,但似乎在大多数时间工作-有更好的方法来实现这一点吗?

如何在c# / MVC中缓存web服务而不是一直调用web服务

你可能想使用一个现有的缓存类来处理过期策略,例如System.Web.HttpContext.Current.Cache。您可以根据查询参数创建缓存键,并首先在缓存中查找它。如果数据不在那里,你可以调用web服务并将结果添加到缓存中,并设置绝对过期时间,比如12小时——如果仍然没有结果,抛出异常。

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

你可能想看看内置的ASP。NET MVC输出缓存功能,例如在本教程中描述的。

短版:

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