延伸 DataCacheStoreProvider 類別 (AppFabric 1.1 快取)
本主題說明如何建立 Windows Server AppFabric 快取 的貫穿式讀取 (read-through)/事後寫入 (write-behind) 提供者。實作抽象基本類別 DataCacheStoreProvider 即可建立提供者。
建立提供者專案
在 Visual Studio 2010 中建立新的 [類別庫] 專案。
新增對 Microsoft.ApplicationServer.Core.dll 組件的參考。根據預設值,此組件位於 \Program Files\Windows Server AppFabric。
開啟此專案的來源檔案:Class1.cs 或 Class1.vb (視專案語言而定)。
在來源檔案頂端,新增 using 陳述式 (在 Visual Basic 中則為 Imports) 到 Microsoft.ApplicationServer.Caching 命名空間。
using Microsoft.ApplicationServer.Caching;
Imports Microsoft.ApplicationServer.Caching
將類別修改為從 DataCacheStoreProvider 繼承。請注意,Visual Studio 2010 程式碼編輯器有提供自動從此類別建立空函數的功能。在 Visual C# 中,於 DataCacheStoreProvider 類別上按一下滑鼠右鍵,然後選取 [實作抽象類別]。在 Visual Basic 中,則是在 Inherits 行後面按 Enter 鍵。
namespace RTProvider { public class Provider : DataCacheStoreProvider
Public Class Provider Inherits DataCacheStoreProvider
簽署組件,將其安裝至全域組件快取,並為其命名強式名稱。在 [方案總管] 中的專案上按一下滑鼠右鍵,然後選取 [屬性]。在專案屬性的 [簽署] 區段中,勾選 [簽署組件] 核取方塊。在 [選擇強式名稱金鑰檔案] 下拉式清單中,選取現有金鑰檔案,或選取 [<新增...>] 建立新檔案。
新增公用建構函式
每個提供者都應以下列簽章實作公用建構函式:
public ProviderClass(string cacheName, Dictionary<string,string> config)
將上述範例中的 ProviderClass
取代為實作 DataCacheStoreProvider 方法之類別的名稱。當快取首次在執行中的快取主機上啟用貫穿式讀取 (read-through) 或事後寫入 (write-behind) 功能時,便會呼叫此建構函式。每次重新啟動快取主機時,也會呼叫此建構函式。建構函式有下列兩個參數:
參數 | 說明 |
---|---|
cacheName |
此 string 為要與此提供者相關聯之快取的名稱。您可以將此名稱儲存起來供日後使用。例如,在建立新的 DataCacheItem 物件以回應讀取要求時,就必須知道快取名稱。 |
config |
此 Dictionary<string,string> 物件包含提供者的組態設定。這些設定是提供者專用,其組態在執行階段需要這些設定。使用 New-Cache 或 Set-CacheConfig Windows Powershell 命令的 ProviderSettings 參數,即可傳遞這些設定。 |
實作提供者方法
提供者必須實作 DataCacheStoreProvider 類別的方法。請注意,如果只要建立貫穿式讀取 (read-through) 提供者,就不必實作「寫入」方法。同樣地,如果只要建立事後寫入 (write-behind) 提供者,就不必實作「讀取」方法。
一般來說,方法的名稱會說明其用途。下表描述不包含多載的方法。
方法 | 說明 |
---|---|
Read |
當快取用戶端要求的快取項目目前不在相關聯的快取中時,便會呼叫此方法。 |
Write |
若是快取用戶端最近在快取中新增或變更的項目,便會呼叫此方法。 |
Delete |
當快取用戶端從相關聯的快取中移除項目時,便會呼叫此方法。 |
Dispose |
處置提供者。 |
讀取方法有兩種。第一種讀取方法是傳遞 DataCacheItemKey 參數,以識別要傳回的單一項目。另一種讀取多載是傳遞 DataCacheItemKey 物件的集合,以在 DataCacheItemKey 和 DataCacheItem 物件的 Dictionary 中擷取和傳回。此 dictionary 物件一開始是空的,必須在從讀取方法傳回前新增讀取項目到其中。請注意,使用 DataCacheItemFactory 類別即可建立要求的項目,如下列範例所示。
DataCacheItem dataCacheItem = DataCacheItemFactory.GetCacheItem(key, CACHE_NAME, objectValue, null);
在前面的範例中,CACHE_NAME
字串應設為先前傳遞到多載建構函式之快取的名稱。key
是所要求的 DataCacheItemKey。objectValue
是應傳回給此快取金鑰之用戶端的物件。
寫入方法也有兩種。第一種寫入方法是傳遞 DataCacheItem 物件。請注意,此物件的 Key 內容包含相關聯的 DataCacheItemKey,Value 內容則包含值。另一種寫入方法是傳遞 DataCacheItemKey 和 DataCacheItem 物件的 Dictionary。
重要
在將項目寫入後端存放區時,務必要將這些項目從 Dictionary<DataCacheItemKey, DataCacheItem> 物件中移除。如果沒有移除這些項目,快取會將此視為失敗的寫入,並於稍後重試操作。
錯誤處理
如果發生錯誤,您可以擲回 DataCacheStoreException 例外狀況物件。根據例外狀況是在 Read 還是 Write 方法期間發生,此例外狀況的結果會有所不同。下表描述其間的差異。
方法 | 擲回例外狀況的結果 |
---|---|
Read |
執行讀取的快取用戶端會收到 DataCacheException 例外狀況,而 ErrorCode 內容等於 DataCacheErrorCode.ReadThroughProviderFailure (例外狀況文字包含代碼 "<ERRCA0025>")。 |
Write |
會假設寫入失敗,並根據快取的事後寫入 (write-behind) 操作重試原則重試寫入。快取用戶端不會收到此錯誤。 |
快取用戶端在存取貫穿式讀取 (read-through) 提供者的 DataCache.Get 呼叫期間,可能收到的 DataCacheErrorCode 值有三種。
DataCacheErrorCode.ReadThroughProviderFailure
DataCacheErrorCode.ReadThroughProviderDidNotReturnResult
DataCacheErrorCode.ReadThroughProviderNotFound
另請注意,在提供者的讀取方法中所花費的時間,會加到 DataCache.Get 方法的總要求時間內。因此,您可能需要提高要求逾時,以將提供者所引起的延遲考量在內。如需詳細資訊,請參閱設定快取用戶端逾時 (Windows Server AppFabric 快取)。
測試和偵錯提供者
為了進行開發和測試,最好是在開發機器上設定單一節點快取叢集。這可讓您快速重新建置及新增組件到本機全域組件快取,並重新啟動本機快取叢集。下列步驟說明如何偵錯提供者。
在 Visual Studio 2010 上,開啟提供者專案。
在 [偵錯] 功能表上,按一下 [附加至處理序]。
勾選 [顯示來自所有使用者的處理序] 和 [顯示所有工作階段中的處理序]。
選取 DistributedCacheService.exe 處理序。
按一下 [附加] 按鈕。
在提供者程式碼中設定中斷點,並從會呼叫提供者方法的其他應用程式對快取執行操作。
警告
停止偵錯工作階段而未卸除偵錯工具,將會停止機器上的快取服務。其結果將會造成該機器上的所有快取資料遺失。
另請參閱
概念
部署貫穿式讀取 (read-through)/事後寫入 (write-behind) 提供者 (AppFabric 1.1 快取)
啟用快取的貫穿式讀取 (read-through) 和事後寫入 (write-behind) 功能 (AppFabric 1.1 快取)
2012-03-05