我有一个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中。
答案 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>
此处提供了有关此功能的更多信息: