2013-07-09 2 views
3

Я пытаюсь разработать инструмент (в Visual Studio 2010, C#), который может читать все элементы, присутствующие в кэш Appfabric, и хранить их в таблице. Мне не нужно использовать 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 Get-CacheRegion. Примечание: вы можете вызывать его с помощью C# – Cybermaxs

Смежные вопросы