【问题标题】:HTTP caching WCF REST/SOAP action using WebInvoke使用 WebInvoke 的 HTTP 缓存 WCF REST/SOAP 操作
【发布时间】:2012-12-07 06:34:25
【问题描述】:

我有一个看起来像这样的 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 中。

【问题讨论】:

    标签: .net wcf rest soap outputcache


    【解决方案1】:

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

    [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

    【讨论】:

    • 我试过了,但因为我使用的是WebInvoke(不是WebGet)所以它不允许我
    • 啊 - 抱歉,它不能与 WebInvoke 一起使用 :( - 毕竟它可能是手动标题!
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 2011-12-15
    • 2012-11-01
    • 2012-02-26
    • 2011-01-09
    • 1970-01-01
    • 2013-01-24
    • 2014-03-16
    相关资源
    最近更新 更多