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

标签 c# web-services caching

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

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

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

目前我整理了一些东西(哪种方法有效,但我认为这不是正确的方法):

  1. 用户输入搜索参数

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

  3. Catch { 调用网络服务,用结果填充列表,然后重新运行 LINQ 查询。如果仍然没有结果则抛出异常

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

代码有点乱,但大多数似乎都能正常工作 - 有没有更好的方法来实现这一目标?

最佳答案

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

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

关于c# - 如何在C#/MVC中缓存web服务结果而不是一直调用web服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171915/

相关文章:

在 Mobile Safari 上缓存声音

c# - 并排对齐按钮

java - 服务架构- webservies | SOAP

c# - SQLite 与 Web 服务 c#

PHP 5.3.6 SoapClient::__doRequest():SSL:连接由对等方重置

asp.net VirtualPathProvider - 使用 GetCacheDependancy 清除缓存问题

c# - 查询 HttpContext.Current.Cache 中的项目

c# - 在与报表文件不同的数据库上运行时,Crystal Report 加载速度非常慢

c# - C# 集合是否始终强制执行顺序?

c# - 为什么 foreach 循环内的局部变量与循环外声明的变量冲突?