NCache извлекает все данные сеанса
На этой странице документации ( http://www.alachisoft.com/resources/docs/ncache/prog-guide/aspnet-session-state-provider.html),
Я нашел:
Fetch Session Data
NCache allows viewing all session data stored in clustered cache via NCache
Session State Module. All session data is added in the specified cache as a
tagged cache item with tag: NC_ASP.net_session_data.
In order to retrieve previously stored session data, data can be fetched by
GetByTag API, which returns Hashtable populated with session IDs and
associated session data stored in the cache.
Hashtable allSessionData = cache.GetByTag(new
Alachisoft.NCache.Runtime.Caching.Tag("NC_ASP.net_session_data"));
Я вижу, что хеш-таблица заполняется записью для каждой сессии, сохраненной в NCache.
Я могу видеть идентификатор сессии в качестве ключа и массив байтов (сериализованный HashTable) в качестве значения.
Я могу десериализовать хеш-таблицу, но я не знаю, как перейти к перечислению всех ключей пользовательского сеанса и принятию каждого значения.
Я должен сделать это.
var cache = NCache.Caches["AspNetCache"];
var ht = cache.GetByTag(new Tag("NC_ASP.net_session_data"));
var dctNcache = ht.Cast<DictionaryEntry>().ToDictionary(c => (string)c.Key, c => c.Value);
byte[] array = (byte[])dctNcache.First().Value;
using (var ms = new MemoryStream(array)){
var bf = new BinaryFormatter();
var obj = bf.Deserialize(ms) as Hashtable;
Debug.WriteLine($"{nameof(obj)} is {obj.GetType()}");
var sd = obj["SD"] as byte[];
using (var ms1 = new MemoryStream(sd)){
var obj1 = bf.Deserialize(ms1);
Debug.WriteLine($"{nameof(obj1)} is {obj1.GetType()}");
}
}