簡體   English   中英

一旦在線部署,MVC Donut Caching就無法正常工作

[英]MVC Donut Caching not working as expected once deployed online

我們正在使用MVC Donut Caching,並且整天都試圖調試這個問題,我仍然無法找到解決方案。

我們選擇在OutputCache上開始使用DonutOutputCache屬性,並且通過日志記錄已經注意到,根據緩存參數,沒有緩存具有DonutOutputCache屬性的某些部分視圖操作。

我們有一個帶有以下嵌套部分視圖的View(索引)。 具有指定的donut cache屬性的那些列在方括號中。

  • _LayoutMainBase.cshtml
    • _Header(PartialView)
      • _HeaderBottomStrip(PartialView)
        • _HeaderMainMenu(ParialView) [DonutOutputCache(Duration = 3600)]
    • RenderBody()(HomeController.Index) [DonutOutputCache(Duration = 3600)]
    • ...

通過日志記錄,我們發現_HeaderMainMenu部分視圖操作實際上在不到一個小時的時間內被多次調用。

這沒有發生:

  • 如果我們恢復到OutputCache屬性
  • 在我們的工作站進行本地測試時

對於可能是什么原因的任何見解?

謝謝你的幫助!

在下載並檢查MVC Donut Caching項目的源代碼之后,我們終於找到了解決這個問題的原因。

此項目中定義的DonutOutputCache屬性使用IKeyBuilder生成用於存儲輸出HTML的緩存鍵。項目附帶的默認DevTrends.MvcDonutCaching.KeyBuilder類生成一個由以下部分組成的鍵:

  • 字首
  • 控制器名稱
  • 行動名稱
  • CacheSettings.Options參數值(取決於設置了OutputCacheOptions.IgnoreQueryString標志的CacheSettings.Options
  • 表單參數(取決於設置了OutputCacheOptions.IgnoreFormData標志的CacheSettings.Options
  • 路線值
  • 如果您將VaryByParam屬性設置為:
    • none ,然后清除所有查詢字符串/表單/路由值
    • 如果你將它設置為除*之外的任何東西,那么它只會考慮這些參數
  • VaryByCustom參數最終將在System.Web.HttpApplication調用相同的GetVaryByCustomString密鑰生成器。

上面生成的密鑰對我們造成了問題,因為當我們不知道這些參數時,正在生成一個不同的密鑰。 出於這個原因,這些方法被多次調用,因為網站是在產品服務器,用戶,搜索引擎,機器人和其他具有不同查詢字符串/表單/路由值的請求上傳遞的,因此生成了新密鑰。

我們的解決方案是創建我們自己的自定義IKeyBuilder而不是默認的IKeyBuilder並解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM