3

我有一个 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}")]
4

1 回答 1

1

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

当您这样调用时,ajax 调用将传递带有额外参数的 URL,并且值将是一个随机的唯一数字。由于 asp.net 方法接收到这个额外的参数,并且您使用varyByParam="*"配置 outputcache ,因此此方法将永远不会缓存。解决方案是

  1. set cache: true in ajax call - (当你调用动态方法时不好)或
  2. 设置 outputcache varyByParam="none"(仅在您的方法需要缓存时使用,无论参数如何)或
  3. set outputcache varyByParam="parameter1;parameter2"(如果您有多个参数,这是理想的解决方案)。对于单个参数,请使用 varyByParam="parameter1"

这么晚才回复很抱歉。刚才看到这个问题。

于 2014-03-26T13:31:37.267 回答