Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C/MVC中缓存web服务结果,而不是一直调用web服务_C#_Web Services_Caching - Fatal编程技术网

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

C# 如何在C/MVC中缓存web服务结果,而不是一直调用web服务,c#,web-services,caching,C#,Web Services,Caching,我正在构建一个小型web应用程序,它主要用于调用外部REST/JSON web服务,传递一些参数,并将结果返回给用户 我知道来自这个外部服务的数据不会经常更改,可能一天更改一次,我希望防止为同一个查询多次调用web服务 实现某种缓存的好方法是什么 目前,我把一些有用的东西放在一起,但我认为这不是正确的方法: 用户输入搜索参数 请尝试{LINQ查询以从列表中选择结果} Catch{调用webservice,用结果填充列表,然后重新运行LINQ查询。如果仍然没有结果,则抛出异常} 我想我会在一天结束

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

我知道来自这个外部服务的数据不会经常更改,可能一天更改一次,我希望防止为同一个查询多次调用web服务

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

目前,我把一些有用的东西放在一起,但我认为这不是正确的方法:

用户输入搜索参数

请尝试{LINQ查询以从列表中选择结果}

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

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


代码有点凌乱,但似乎大部分时间都在工作-有没有更好的方法来实现这一点?

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


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

您可能希望查看所述的内置ASP.Net MVC输出缓存功能,例如

简短版本:


只需添加[OutputCacheDuration=%duration\u in_seconds%,VaryByParam=none]属性设置为要缓存其结果的MVC方法。

我不是要缓存控制器的输出-控制器调用外部web服务-我要缓存该外部调用的结果,以便我的控制器不需要继续调用外部服务。因此,我应该使用缓存,而不是使用列表类并使用param1-param2-param3等键将MyObject项添加到缓存中?@Steve yeah,这就是我过去做过的/做过类似事情的方式。谢谢Rob-我如何访问缓存对象?类似于:如果System.Web.HttpContext.Current.Cache[test]==null{//get data from Web service}或者{return object}@steve可以正常工作,请查看。