資源描述:
《ASP_net mvc 自定義的OutputCache》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、在ASP.NET中構(gòu)建和使用自定義的OutputCache提供程序BrandonSatrom下載代碼示例如果您是一位Web開發(fā)人員,您過去可能使用過ASP.NET提供的輸出緩存功能。ASP.NET輸出緩存功能是隨著Microsoft.NETFramework的第一個版本推出的,該功能通過從緩存中檢索向站點訪問者提供的內(nèi)容以及避免重新執(zhí)行頁面或控制器,提高了向站點訪問者提供內(nèi)容方面的性能。當返回您不經(jīng)常更新的數(shù)據(jù)或者返回一段時間后將過期的數(shù)據(jù)時,該功能不需要您的應用程序執(zhí)行耗費大量資源的數(shù)據(jù)庫調(diào)用
2、操作。ASP.NET輸出緩存使用的是內(nèi)存存儲機制,并且在NETFramework4出現(xiàn)之前,您無法使用您自己的實現(xiàn)覆蓋或替代默認緩存?,F(xiàn)在,借助新的OutputCacheProvider類型,您可以在ASP.NET中實現(xiàn)您自己的緩存頁面輸出機制。在本文中,我將為您介紹兩種自定義機制。首先,我將使用MongoDB(一種常用的面向文檔數(shù)據(jù)庫)在一個簡單的ASP.NETMVC應用程序中創(chuàng)建我自己的提供程序,以方便輸出緩存。然后,我會使用同一個應用程序快速交換我的自定義提供程序,以便利用WindowsA
3、zureAppFabric的功能—具體地說,就是在云中利用WindowsAzure基礎結(jié)構(gòu)提供分布式內(nèi)存緩存的新DistributedCache提供程序。ASP.NET中的輸出緩存在ASP.NETWeb窗體應用程序中,可以通過向任意ASP.NET頁面或用戶控件添加OutputCachePage指令來配置輸出緩存:1.??????????<%@?OutputCache?Duration="60"?Location="Any"?VaryByParam="name"?%>2.????????對于ASP
4、.NETMVC應用程序,輸出緩存是使用ASP.NETMVC附帶的操作篩選器來提供的,該操作篩選器可用作任何控制器操作的一個屬性:1.??????????[OutputCache(Duration=60,?VaryByParam="none")]2.????????“Duration”和“VaryByParam”在ASP.NETMVC1和2應用程序中是必需的(VaryByParam在ASP.NETMVC3中是可選的),這兩種機制都提供其他一些屬性和參數(shù),這些屬性和參數(shù)使開發(fā)人員能夠控制緩存內(nèi)容的方
5、式(一些VaryByX參數(shù))、緩存內(nèi)容的位置(Location)和用于設置緩存無效依賴項的功能(SqlDependency)。對于傳統(tǒng)的輸出緩存,在您的應用程序中實現(xiàn)該功能時不需要任何其他東西。OutputCache類型是一個在您的應用程序啟動時運行,并在遇到頁面指令或操作篩選器時開始發(fā)揮作用的HttpModule。收到第一個相關的頁面或控制器請求后,ASP.NET將接收生成的內(nèi)容(HTML、CSS、JavaScript文件等)并將各個項目以及過期日期和用于標識相應項目的關鍵字放入內(nèi)存緩存中。過
6、期日期由Duration屬性確定,關鍵字則由到頁面的路徑和必要的VaryBy值的組合確定—例如,如果提供了VaryByParam屬性,則會查詢字符串或參數(shù)值。現(xiàn)在,請考慮一下以這種方式定義的控制器操作:1.??????????[OutputCache(Duration=20,?VaryByParam="vendorState")]2.Public?ActionResult?GetVendorList(string?vendorState)3.{4.??//?Action?logic?here.5
7、.??????????}6.????????在這種情況下,對于vendorState的各個實例(例如,一個針對德克薩斯州,一個針對華盛頓州等等),ASP.NET將在請求該州時分別緩存生成的HTML視圖的一個實例。在這種情況下,存儲各個實例所使用的關鍵字將是相關路徑和vendorState的組合。另一方面,如果將VaryByParam屬性設置為“none”,則ASP.NET將緩存第一次執(zhí)行GetVendorList的結(jié)果,并且會向所有后續(xù)請求傳遞相同的緩存版本,而不考慮vendorState參數(shù)的
8、值是否傳入了相應操作。當沒有提供VaryByParam值時存儲此實例所使用的關鍵字就是路徑。圖1簡單描述了此過程。圖1ASP.NET輸出緩存過程除了用于控制緩存中的項目的生存期的Duration參數(shù)以外,還有一些VaryBy參數(shù)(VaryByParam、VaryByHeader、VaryByCustom、VaryByControl和VaryByContentEncoding)用于控制緩存項目的精度,可以配置輸出緩存,以控制緩存內(nèi)容的位置(客戶端、服務器或下游代理服務器)。此外,ASP.NET2.