【发布时间】:2012-06-19 15:05:58
【问题描述】:
我正在尝试使用支持缓存和条件 GET 的 WCF 实现 REST Web 服务。
我按照MSDN: Caching Support for WCF Web HTTP Services 中的说明实现了基本缓存。这意味着将[AspNetCacheProfile("MyOutputCacheProfile")] 属性添加到我的每个Web 方法,并将适当的条目添加到web.config。这似乎工作正常:当将相同的参数传递给 Web 方法时,将返回缓存的响应。
然后我通过计算 ETag 值并将其设置在响应中,添加了对条件 GET 的支持,如下所示:
WebOperationContext.Current.OutgoingResponse.SetETag(myETag);
这种方法有效:我第一次调用 Web 方法时可以在响应中看到 ETag 标头。
但问题是:下次我使用相同的参数调用该 Web 方法时,会返回一个缓存响应,并且缓存响应不包含 ETag 标头。 (如果我等到缓存过期,或者完全禁用缓存,则 ETag 标头会正确返回。)
那么,有没有办法让缓存的响应包含该 ETag 值?
更新:经过更多的研究和实验,我发现这样做会导致 ETag 标头包含在所有缓存的响应中:
HttpContext.Current.Response.Cache.SetETag(myETag);
如果我调用它,那么我不需要调用关联的WebOperationContext...SetETag() 操作来使一切正常。
这是正确的做法吗?
【问题讨论】: