4
我有一個WCF Web服務返回JSON。WCF REST JSON服務緩存
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
Stream GetStuff(int arg);
而且我用這個方法的對象圖轉換成JSON:
private static Stream ToJson(object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(obj);
if (WebOperationContext.Current != null)
{
OutgoingWebResponseContext outgoingResponse = WebOperationContext.Current.OutgoingResponse;
outgoingResponse.ContentType = "application/json; charset=utf-8";
outgoingResponse.Headers.Add(HttpResponseHeader.CacheControl, "max-age=604800"); // one week
outgoingResponse.LastModified = DateTime.Now;
}
return new MemoryStream(Encoding.UTF8.GetBytes(json));
}
我想在瀏覽器中緩存的反應,但瀏覽器仍然產生If-Modified-Since
電話到與304 Not Modified
重播的服務器。我希望瀏覽器緩存並使用響應,而不必每次都撥打If-Modified-Since
調用服務器。
我注意到,即使我在代碼中指定Cache-Control "max-age=604800"
,通過WCF發送的響應報頭是Cache-Control no-cache,max-age=604800
。爲什麼WCF添加「無緩存」部分以及如何阻止添加它?
謝謝,這解決了我的問題:HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(14)); HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public); 我不確定HttpContext.Current在WCF Web服務中是否可用 – 2011-06-09 13:57:32
僅當您在aspNet兼容模式下運行時纔可用。 – 2012-02-06 14:05:15