HTTP使用WebInvoke缓存WCF REST / SOAP操作

时间:2012-12-19 20:06:27

标签: .net wcf rest soap outputcache

我有一个WCF Web服务(不是Web Api),如下所示:

public interface ILogsService
{
    [OperationContract]
    [WebInvoke(UriTemplate = "/Find")]
    [Description("-Service description-")]
    FindLogsResult FindLogs(LogsFilterRequest request);
}

我想知道是否有办法(或更好的方法)通过将HTTP缓存标头发送回客户端来缓存服务响应。

我已经测试并看到这可以通过使用:

来完成
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));

但如果可能的话,我想要一个“更清洁”的解决方案。

此服务具有aspNetCompatibilityEnabled="true",并始终托管在IIS中。

1 个答案:

答案 0 :(得分:2)

您应该能够为方法添加缓存属性:

[AspNetCacheProfile("CacheMediumTerm")]
public FindLogsResult FindLogs(LogsFilterRequest request) {
    //...

然后可以在配置文件中配置:

<!-- ...  -->
<system.web>
   <caching>
      <outputCacheSettings>
         <outputCacheProfiles>
            <add name="CacheMediumTerm" duration="120" varyByParam="none" sqlDependency="MyTestDatabase:MyTable"/>
         </outputCacheProfiles>
      </outputCacheSettings>
   </caching>
   <!-- ... -->
</system.web>

此处提供了有关此功能的更多信息:

http://msdn.microsoft.com/en-us/library/ee230443.aspx