延伸 DataCacheStoreProvider 類別 (AppFabric 1.1 快取)

本主題說明如何建立 Windows Server AppFabric 快取 的貫穿式讀取 (read-through)/事後寫入 (write-behind) 提供者。實作抽象基本類別 DataCacheStoreProvider 即可建立提供者。

建立提供者專案

  1. 在 Visual Studio 2010 中建立新的 [類別庫] 專案。

  2. 新增對 Microsoft.ApplicationServer.Core.dll 組件的參考。根據預設值,此組件位於 \Program Files\Windows Server AppFabric。

  3. 開啟此專案的來源檔案:Class1.cs 或 Class1.vb (視專案語言而定)。

  4. 在來源檔案頂端,新增 using 陳述式 (在 Visual Basic 中則為 Imports) 到 Microsoft.ApplicationServer.Caching 命名空間。

    using Microsoft.ApplicationServer.Caching;
    
    Imports Microsoft.ApplicationServer.Caching
    
  5. 將類別修改為從 DataCacheStoreProvider 繼承。請注意,Visual Studio 2010 程式碼編輯器有提供自動從此類別建立空函數的功能。在 Visual C# 中,於 DataCacheStoreProvider 類別上按一下滑鼠右鍵,然後選取 [實作抽象類別]。在 Visual Basic 中,則是在 Inherits 行後面按 Enter 鍵。

    namespace RTProvider
    {
        public class Provider : DataCacheStoreProvider
    
    Public Class Provider
        Inherits DataCacheStoreProvider
    
  6. 簽署組件,將其安裝至全域組件快取,並為其命名強式名稱。在 [方案總管] 中的專案上按一下滑鼠右鍵,然後選取 [屬性]。在專案屬性的 [簽署] 區段中,勾選 [簽署組件] 核取方塊。在 [選擇強式名稱金鑰檔案] 下拉式清單中,選取現有金鑰檔案,或選取 [<新增...>] 建立新檔案。

新增公用建構函式

每個提供者都應以下列簽章實作公用建構函式:

public ProviderClass(string cacheName, Dictionary<string,string> config)

將上述範例中的 ProviderClass 取代為實作 DataCacheStoreProvider 方法之類別的名稱。當快取首次在執行中的快取主機上啟用貫穿式讀取 (read-through) 或事後寫入 (write-behind) 功能時,便會呼叫此建構函式。每次重新啟動快取主機時,也會呼叫此建構函式。建構函式有下列兩個參數:

參數 說明

cacheName

string 為要與此提供者相關聯之快取的名稱。您可以將此名稱儲存起來供日後使用。例如,在建立新的 DataCacheItem 物件以回應讀取要求時,就必須知道快取名稱。

config

Dictionary<string,string> 物件包含提供者的組態設定。這些設定是提供者專用,其組態在執行階段需要這些設定。使用 New-CacheSet-CacheConfig Windows Powershell 命令的 ProviderSettings 參數,即可傳遞這些設定。

實作提供者方法

提供者必須實作 DataCacheStoreProvider 類別的方法。請注意,如果只要建立貫穿式讀取 (read-through) 提供者,就不必實作「寫入」方法。同樣地,如果只要建立事後寫入 (write-behind) 提供者,就不必實作「讀取」方法。

一般來說,方法的名稱會說明其用途。下表描述不包含多載的方法。

方法 說明

Read

當快取用戶端要求的快取項目目前不在相關聯的快取中時,便會呼叫此方法。

Write

若是快取用戶端最近在快取中新增或變更的項目,便會呼叫此方法。

Delete

當快取用戶端從相關聯的快取中移除項目時,便會呼叫此方法。

Dispose

處置提供者。

讀取方法有兩種。第一種讀取方法是傳遞 DataCacheItemKey 參數,以識別要傳回的單一項目。另一種讀取多載是傳遞 DataCacheItemKey 物件的集合,以在 DataCacheItemKeyDataCacheItem 物件的 Dictionary 中擷取和傳回。此 dictionary 物件一開始是空的,必須在從讀取方法傳回前新增讀取項目到其中。請注意,使用 DataCacheItemFactory 類別即可建立要求的項目,如下列範例所示。

DataCacheItem dataCacheItem = DataCacheItemFactory.GetCacheItem(key, CACHE_NAME, objectValue, null);

在前面的範例中,CACHE_NAME 字串應設為先前傳遞到多載建構函式之快取的名稱。key 是所要求的 DataCacheItemKeyobjectValue 是應傳回給此快取金鑰之用戶端的物件。

寫入方法也有兩種。第一種寫入方法是傳遞 DataCacheItem 物件。請注意,此物件的 Key 內容包含相關聯的 DataCacheItemKeyValue 內容則包含值。另一種寫入方法是傳遞 DataCacheItemKeyDataCacheItem 物件的 Dictionary

重要

在將項目寫入後端存放區時,務必要將這些項目從 Dictionary<DataCacheItemKey, DataCacheItem> 物件中移除。如果沒有移除這些項目,快取會將此視為失敗的寫入,並於稍後重試操作。

錯誤處理

如果發生錯誤,您可以擲回 DataCacheStoreException 例外狀況物件。根據例外狀況是在 Read 還是 Write 方法期間發生,此例外狀況的結果會有所不同。下表描述其間的差異。

方法 擲回例外狀況的結果

Read

執行讀取的快取用戶端會收到 DataCacheException 例外狀況,而 ErrorCode 內容等於 DataCacheErrorCode.ReadThroughProviderFailure (例外狀況文字包含代碼 "<ERRCA0025>")。

Write

會假設寫入失敗,並根據快取的事後寫入 (write-behind) 操作重試原則重試寫入。快取用戶端不會收到此錯誤。

快取用戶端在存取貫穿式讀取 (read-through) 提供者的 DataCache.Get 呼叫期間,可能收到的 DataCacheErrorCode 值有三種。

  1. DataCacheErrorCode.ReadThroughProviderFailure

  2. DataCacheErrorCode.ReadThroughProviderDidNotReturnResult

  3. DataCacheErrorCode.ReadThroughProviderNotFound

另請注意,在提供者的讀取方法中所花費的時間,會加到 DataCache.Get 方法的總要求時間內。因此,您可能需要提高要求逾時,以將提供者所引起的延遲考量在內。如需詳細資訊,請參閱設定快取用戶端逾時 (Windows Server AppFabric 快取)

測試和偵錯提供者

為了進行開發和測試,最好是在開發機器上設定單一節點快取叢集。這可讓您快速重新建置及新增組件到本機全域組件快取,並重新啟動本機快取叢集。下列步驟說明如何偵錯提供者。

  1. 在 Visual Studio 2010 上,開啟提供者專案。

  2. 在 [偵錯] 功能表上,按一下 [附加至處理序]。

  3. 勾選 [顯示來自所有使用者的處理序] 和 [顯示所有工作階段中的處理序]。

  4. 選取 DistributedCacheService.exe 處理序。

  5. 按一下 [附加] 按鈕。

  6. 在提供者程式碼中設定中斷點,並從會呼叫提供者方法的其他應用程式對快取執行操作。

警告

停止偵錯工作階段而未卸除偵錯工具,將會停止機器上的快取服務。其結果將會造成該機器上的所有快取資料遺失。

另請參閱

概念

部署貫穿式讀取 (read-through)/事後寫入 (write-behind) 提供者 (AppFabric 1.1 快取)
啟用快取的貫穿式讀取 (read-through) 和事後寫入 (write-behind) 功能 (AppFabric 1.1 快取)

  2012-03-05