2013-07-09 65 views
3

我想開發一個可以讀取Appfabric緩存中存在的所有項目並將它們存儲在表格中的工具(在Visual Studio 2010中,C#)。我不必使用PowerShell。如何讀取Appfabric緩存中存在的所有項目:

首先,我想如果我能得到緩存中存在的所有區域,我可以使用DataCache.GetObjectsInRegion方法來完成我的任務。但是我無法從緩存中獲取所有的區域名稱,因爲它不顯示用戶定義的區域名稱,但只顯示默認的區域名稱,所以現在我放棄了這種方法。

任何人都可以在這裏指導我,我的主要目標是讀取緩存中的所有項目。

回答

4

沒有內置的方法來列出緩存中的所有項目。

你是對的,可以列出所有使用GetObjectsInRegion的項目作爲命名緩存。您必須首先知道所有區域名稱(如果使用)或調用GetSystemRegions以獲取所有(默認)系統區域。一個簡單的foreach將允許你列出所有項目。當您將某些內容放入沒有區域名稱的緩存中時,它將被添加到系統區域。

這是一個基本的例子

// Declare array for cache host(s). 
    DataCacheServerEndpoint[] servers = new DataCacheServerEndpoint[1]; 
    servers[0] = new DataCacheServerEndpoint("YOURSERVERHERE", 22233); 

    // Setup the DataCacheFactory configuration. 
    DataCacheFactoryConfiguration factoryConfig = new DataCacheFactoryConfiguration(); 
    factoryConfig.Servers = servers; 

    factoryConfig.SecurityProperties = new DataCacheSecurity(DataCacheSecurityMode.None, DataCacheProtectionLevel.None); 

    // Create a configured DataCacheFactory object. 
    DataCacheFactory mycacheFactory = new DataCacheFactory(factoryConfig); 

    // Get a cache client for the default cache 
    DataCache myCache = mycacheFactory.GetDefaultCache(); //or change to mycacheFactory.GetCache(myNamedCache); 

    //inserty dummytest data 
    myCache.Put("key1", "myobject1"); 
    myCache.Put("key2", "myobject2"); 
    myCache.Put("key3", "myobject3"); 
    Random random = new Random(); 

    //list all items in the cache : important part 
    foreach (string region in myCache.GetSystemRegions()) 
    { 
     foreach (var kvp in myCache.GetObjectsInRegion(region)) 
     { 
      Console.WriteLine("data item ('{0}','{1}') in region {2} of cache {3}", kvp.Key, kvp.Value.ToString(), region, "default"); 
     } 
    } 
+0

謝謝您的回答,但還有一個問題,GetSystemRegions方法來確定的緩存,但對其他非默認的地區什麼默認的區域? – apudxtr

+0

這就是交易:你無法獲得特定的地區名稱。這隻能通過主機上的Powershell CmdLets來實現(因爲區域限於單個緩存主機)。您也可以嘗試使用包裝自己維護所有區域名稱的列表。 – Cybermaxs

+0

僅適用於Powershell Cmdlet Get-CacheRegion。注意:你可以使用C# – Cybermaxs