2013-04-03 57 views
1

我在ASP.NET 4.5上使用ServiceStack。我在ServiceStack InMemory緩存方面遇到了麻煩。如果我只是從瀏覽器直接調用URL,它將取回緩存版本,但如果我嘗試通過JQuery中的getJSON調用它,它永遠不會撤回緩存版本,並且每次只重新讀取數據。ServiceStack不緩存Json

這裏是基本的碼位...

public class AResponse : IHasResponseStatus 
{ 
    public ResponseStatus ResponseStatus { get; set; } 

    public Html Html { get; set; } 
} 

public object Get(A request) 
    { 
     var cacheKey = UrnId.Create<string>(request.UserKey + request.Id); 
     var expireInTimespan = new TimeSpan(1, 0, 0); 
     return RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey, expireInTimespan,() => 
     { 
      var ar = new AResponse(); 
      var html = new Html(); 
      html.Test = "test"; 
      ar.Html = html; 
      return ar; 
     }); 
    } 

...感謝您的任何想法。

+0

正如我在下面提到的... 發現問題 - 我正在傳遞迴調=?,所以jquery動態地創建了回調var - 因此每次在getJSON調用時,url都是不同的。 – QuaffAPint 2013-04-08 17:38:35

回答

1

我的理解是,當您從瀏覽器調用服務時,您將緩存Html版本。因此,ServiceStack將通過在您的密鑰上應用.html後綴來插入/檢索。當你從JQuery調用它時,它會緩存一個Json版本並在你的密鑰上應用一個.json後綴。您可以在網址上使用​​從瀏覽器調用您的服務來測試。這會緩存json版本(而不是html),然後從JQuery調用來獲取緩存的json。

+0

感謝您的回覆。但是 - 即使我只是總是直接從jquery getJSON調用,而不是直接通過瀏覽器,它仍然不會緩存。 現在,如果我通過瀏覽器調用並添加?format = json它將緩存。所以,它似乎不會緩存,如果通過jquery getJSON調用 - 這當然是我想要緩存的。 – QuaffAPint 2013-04-08 17:12:25

+0

您可以嘗試將'?format = json'添加到jquery getJSON調用中的url中。 – paaschpa 2013-04-08 17:20:15

+0

發現問題 - 我正在傳遞迴調=?,所以jquery動態地創建了回調函數var - 因此每次在getJSON調用時URL都是不同的。 :-) 謝謝回覆。 – QuaffAPint 2013-04-08 17:38:11