2013-01-05 42 views
4

我建立基本上将被用来调用外部REST/JSON Web服务 Web应用程序,通过一些参数和将这个结果返回给表中的用户。如何缓存在C#中的Web服务结果/ MVC的,而不是调用Web服务的所有时间

我知道从外部服务中的数据不会经常变化(可能每天一次),我想,以防止调用Web服务很多次了相同的查询。

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

在我放在一起的东西的那一刻(哪种类型的作品,但我不认为这是正确的方式):

  1. 用户输入搜索参数

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

  3. 抓住{调用web服务,其结果填充列表,然后重新运行LINQ查询。如果仍然没有结果,然后再次抛出异常}

我想我会清空列表在一天的末尾,以便每一天,它会重建。

该代码是有点混乱,但似乎工作的时间 - 有没有更好的办法来实现这一目标?

回答

4

您可能想要使用现有缓存类之一,这些缓存类将为您处理过期策略,例如, System.Web.HttpContext.Current.Cache。您可以从查询参数创建缓存键,并首先在缓存中查找它。如果数据不存在,您可以调用Web服务,并将结果添加到缓存中,并且绝对截止时间为12小时 - 如果仍然没有结果抛出异常。

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

+0

因此,而不是使用列表我应该使用Cache类,并添加myObject的项目到缓存中“参数1,参数2,参数3”的等密钥? – Steve

+0

@是的,这就是我过去做过/做过类似事情的方式。 – RobH

+0

感谢罗布 - 我将如何访问Cache对象?类似于:if(System.Web.HttpContext.Current.Cache [“test”] == null){ //从网络服务获取数据} 其他{返回对象} – Steve

1

你可能想看看内置描述ASP.NET MVC输出缓存功能,例如,in this tutorial

短版:

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

+1

我没有看缓存控制器的输出 - 控制器调用外部Web服务 - 我想缓存该外部调用的结果,以便我的控制器不需要继续调用外部服务 – Steve