输出缓存不适用于AJAX varyByParam

时间:2013-10-02 07:12:43

标签: c# asp.net .net wcf caching

我有一个WCF Web服务的端点,它没有在AJAX请求的性能监视器中获得输出缓存命中,它确实获得了 AJAX请求到端点的输出缓存。

网络配置:

<caching>
  <outputCacheSettings >
    <outputCacheProfiles>
      <add location="Any" name="myCache" duration="3600" varyByParam="*" />
     </outputCacheProfiles>
  </outputCacheSettings>
</caching>

我在配置中缺少一个选项吗?我没有包含Javascript,因为我怀疑问题在于那里,因为服务器不应该检查任何标头来确定缓存价值。

终点:

[AspNetCacheProfileAttribute("myCache")]
        [WebGet(ResponseFormat= WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "suburb?name={name}&state={state}&category={category}&bedrooms={bedrooms}&country={country}")]

1 个答案:

答案 0 :(得分:1)

当您进行ajax调用时,您可能会将其作为缓存传递:false。

当您这样调用时,ajax调用将使用额外参数传递URL,值将是随机唯一编号。由于asp.net方法接收此额外参数并使用 varyByParam =&#34; *&#34; 配置outputcache,因此此方法永远不会缓存。解决方案

  1. 在ajax调用中设置 cache:true - (当你调用动态方法时不好)或
  2. 设置outputcache      varyByParam =&#34; none&#34; (仅在您的方法需要缓存时使用,无论参数如何)或
  3. 设置outputcache      varyByParam =&#34; parameter1; parameter2&#34; (如果您有多个参数,这是理想的解决方案)。用于单参数使用 的的VaryByParam =&#34;参数1&#34;
  4. 很抱歉迟到的回复。我刚才看到了这个问题。