使用IsLine FrameWork開發ASP.NET程式之七—使用HttpContentProvider 訪問緩衝

來源:互聯網
上載者:User

    上一期我給大家介紹了異常的展示管理部分,使用者可以使用預置渲染器也可以自訂渲染,今天我們來介紹 IsLine.HttpContent.HttpContentProvider命名空間,該命名空間主要封裝了在B/S模式運行下的一些特性,開發人員可以使用它規範命名問題、獲得統一規範的存取策略(比如cookie到期時間、ssl支援),並按照這樣的策略進行開發,而這些策略是在web.config中配置的,如果後期需要修改策略,可以直接更新config檔案,整站的存取就會隨之發生變化。這樣為網站變數的修改與控制提供了統一的入口,簡化了修改流程,增加了程式的穩定性,同時也極大的降低了測試的成本。

    這個Provider主要封裝了對緩衝、Session與Cooike的操作,該空間下主要有三個類:CookieProvider、    SessionProvider、CacheProvider。這三個類庫統一實現ICapability介面,ICapability繼承自IBaseCapability介面,IBaseCapability規範了HttpContentProvider的基礎能力,而ICapability則是對基礎能力的擴充,如下:

namespace IsLine.HttpContent.HttpContentProvider
{
public interface IBaseCapability
{
bool Remove(string Name);
bool IsExit(string Name);
}
public interface ICapability : IBaseCapability
{
object GetContent(string Name);
bool UpdateContent(string Name, object value);
}
}

    可以看出,介面主要約束了如何刪除、獲得與更新一個對象,即約束了Session、Cookie、Cache的行為。在其他的Provider中,其實也有對本身能力與操作相關規範,這些規範被稱作規約或約束,如果各位讀者看過本系列文章的第一篇,就會有所瞭解關於IsLine FrameWork規約的介紹。

    給大家介紹的首先是有關Cache的操作,CacheProvider支援.Net兩種類型的Cache:運行時Cache(HttpRuntime.Cache)與上下文Cache(HttpContext.Current.Cache),這兩種Cache有什麼區別呢?這裡簡單的解釋一下:

     HttpRuntime.Cache是Application層級的,而HttpContext.Current.Cache是僅對當前WEB頁面請求才有效。換句話說,HttpRuntime Cache所有的web與非web程式都可以調用,而HttpContext則只能用在WEB中,這裡向大家推薦使用HttpRuntime Cache。Cache實際上是記憶體片,在電腦經典理論中,這是一種以空間換時間的做法,目前雖然記憶體很便宜,但是如果不當的使用,依然會帶來效能問題,因為.Net運行時環境是託管的,也就是說通用語言執行平台CLR會管理.Net 代碼的運行,如果這部分的內容過於龐大,同樣會造成效能的下降,因為CLR不得不維護一個龐大的記憶體地區,記憶體回收機制也會頻繁啟動,這就使得正常啟動並執行代碼收到影響,這種情況是應當避免的。

    緩衝中的資料是易失的,資料並不是在整個應用程式生命週期中都儲存在記憶體中,由 ASP.NET 管理緩衝,它會在項到期、無效、或記憶體不足時移除緩衝中的項。還可以配置應用程式緩衝,以便在移除項時通知應用程式。所以,你並不知道緩衝在什麼時候會失效,即使你已經配置了依賴項。

    關於緩衝的到期有2種類型:滑動視窗與絕對到期。滑動視窗是指某項自上次被訪問後多長時間到期;絕對到期指定某項在設定的時間到期,而不考慮訪問頻率。可以將緩衝中某一項的生存期配置為依賴於其他應用程式元素,如某個檔案或資料庫。當快取項目依賴的元素更改時,ASP.NET 將從緩衝中移除該項。

    CacheProvider類支援以下2種依賴:檔案依賴項與SQL SERVER資料庫依賴項。檔案依賴只緩衝中的項依賴於外部檔案。如果該檔案被修改或刪除,則快取項目也會被移除;QL SERVER資料庫依賴項只緩衝中的項依賴於 Microsoft SQL Server 2005、SQL Server 2000 或 SQL Server 7.0 資料庫中表的更改。對於 SQL Server 2005,緩衝中的項可依賴於表中的某一行。

    以下是CacheProvider主要方法的介紹,其中包含重載項,重載項一併在以下列出:

    ● CacheProvider :建構函式,參數指明了需要操作的緩衝名稱

    ● Object GetContent:獲得緩衝中的內容,其中有如下幾個參數, CacheType指明緩衝類型,可以是運行時或上下文Cache,預設為運行時Cache;cacheName為需要操作的緩衝名稱;CacheDependencyType為依賴項類型,可以是sql或檔案;depend為具體依賴項;depend為具體依賴項

    ● Bool UpdateContent:更新或建立緩衝內容,參數指明了需要操作的緩衝名稱;使用無參的方法,系統將返回預設緩衝的內容。

    ● bool Remove:移除緩衝,參數指明了需要操作的緩衝名稱,並返回是否移除成功

    ● IsExit:判斷緩衝是否存在,參數指明了需要操作的緩衝名稱

    緩衝依賴項可以以參數方式統一傳入,這樣方便了開發人員。SQL緩衝只針對SQL SERVER資料庫有效,指定使用檔案快取還是資料庫緩衝,可以通過CacheDependencyType參數達到目的,CacheDependencyType是一個枚舉值,在IsLine.HttpContent.HCDataTypeEnum命名空間下,該命名空間內容為枚舉類,規範了參數的傳遞,這四個枚舉為DateType、CacheType、CacheDependencyType、RemoveType。其中DateType規範了滑動時間的類型包括日、月、年與分鐘;CacheType規範了處理Cache的類型,包括運行時Cache與上下文Cache;CacheDependencyType規範了緩衝依賴類型,包括SQL SERVER資料庫依賴、檔案依賴和None,None表示無依賴;RemoveType規範了移除選項的操作,該枚舉會在對Cookie的操作中用到,其中的2個枚舉值RemoveInput, RemoveAllExcludeInput分別表示移除傳入的Cookie和移除除傳入之外的Cookie。

    需要注意的是,即使使用CacheProvider(string cacheName)指明了需要操作的Cache,但是如果後面的代碼中,執行個體調用的方法中包含其他Cache的名稱,那麼以後使用不帶Cache名稱參數的方法時,將會操作那個新的Cache,而忽略建構函式中指明的Cache。

    例如:

    CacheProvider cp = new CacheProvider(“A”);
    cp.GetContent(); //這一步將獲得Cache“A”的內容
    cp.IsExit(“B”) //這一步檢測Cache“B”是否存在
    cp.GetContent(); //這一步將獲得Cache“B”的內容,而不是建構函式中的Cahce“A”

    Cache是.Net平台為大家提供的一個很好的機制,IsLine FrameWork對這個機制完美封裝,為程式人員提供了規範的命名規則用於對它進行存取,並且簡化了存取調用的難度,使使用過程更加簡便。

    此文已在《軟體報》同步發布,任何個人媒體不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.