我試圖實現與WCF一個REST Web服務,同時支持高速緩存和有條件的GET請求的ETag /條件GET。同時支持ASP.NET緩存和WCF WebHttp服務
我實現了按照MSDN: Caching Support for WCF Web HTTP Services該指令的基本緩存。這意味着要爲我的每個Web方法添加[AspNetCacheProfile("MyOutputCacheProfile")]
屬性,並向web.config
添加適當的條目。這似乎工作正常:當相同的參數傳遞給Web方法時,返回緩存的響應。
WebOperationContext.Current.OutgoingResponse.SetETag(myETag);
那八九不離十工作:
然後,我通過計算ETag值以及設置在這樣的反應增加了有條件GET支持,我可以看到ETag
頭中的響應,我第一次打電話網絡方法。
但問題出在這裏:下次我使用相同的參數調用Web方法時,會返回緩存的響應,並且緩存的響應不包含ETag
標頭。 (如果我等到緩存過期,或禁用緩存完全,那麼ETag頭正確返回。)
那麼,有沒有什麼辦法讓緩存響應包括ETag值?
更新:一些更多的研究和實驗後,我發現,這樣做會導致包括在所有緩存的響應的ETag頭:
HttpContext.Current.Response.Cache.SetETag(myETag);
如果我打電話說,我不要不需要撥打相關聯的WebOperationContext...SetETag()
操作即可使所有內容都能正常工作。
這是正確的方式做到這一點?