ASPNET: переключаться между поставщиками состояний сеансов?
Я хочу разработать новый пользовательский поставщик состояния сеанса или использовать существующий (распределенное кэширование, sql ...). Наш основной веб-сайт обеспечивает более 10 000 000 посещений в день. Для нас очень важно обеспечить легкий откат / переключение в случае ошибки или снижения производительности. Изменение web.config не является оптимальным, поскольку у нас более 20 серверов переднего плана. Наша идея состоит в том, чтобы переключаться между провайдером сеансов (от нашего обычая до InProc) с помощью простой конфигурации в базе данных.
Можно ли иметь несколько поставщиков состояния сеанса или легко переключаться между поставщиками?
я нашел здесь http://netpl.blogspot.fr/2007/06/wrapped-inprocsessionstatestore.html, решение для использования универсальной обертки, но она не кажется достаточно надежной.
Спасибо,
2 ответа
Только для будущих ссылок невозможно динамически изменить поставщика состояния сеанса.
Это не.. совершенно верно.. вы можете сделать это, используя Reflection:
var privateFieldFlags = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic;
//Get session state section
var sessionStateSection = ConfigurationManager.GetSection("system.web/sessionState") as SessionStateSection;
var values = typeof(ConfigurationElement).GetField("_values", privateFieldFlags).GetValue(sessionStateSection);
var entriesArray = values.GetType().BaseType.GetField("_entriesArray", privateFieldFlags).GetValue(values);
//Get "Mode" entry (index: 2)
var modeEntry = (entriesArray as System.Collections.ArrayList)[2];
var entryValue = modeEntry.GetType().GetField("Value", privateFieldFlags).GetValue(modeEntry);
//Change entry value to InProc
entryValue.GetType()
.GetField("Value", privateFieldFlags)
.SetValue(entryValue, System.Web.SessionState.SessionStateMode.InProc);
Рекомендации:
Динамический поставщик состояния сеанса
http://www.answerandquestion.net/questions/4447903/dynamic-session-state-provider