ASPNET:在会话状态提供者之间切换?

时间:2012-07-26 10:19:48

标签: asp.net session-state

我想开发一个新的自定义会话状态提供程序或使用现有的(分布式缓存,sql ...)。我们的主要网站每天访问量超过10 000 000次。如果出现错误或性能损失,提供简单的回滚/切换非常重要。更改web.config不是最佳选择,因为我们有超过20个前端服务器。我们的想法是在会话提供程序(从我们的自定义到InProc)与数据库中的简单配置之间切换。

是否可以拥有多个会话状态提供程序或在提供程序之间轻松切换?

我在这里找到http://netpl.blogspot.fr/2007/06/wrapped-inprocsessionstatestore.html,这是一个使用通用包装器的解决方案,但它看起来不太健壮。

谢谢,

2 个答案:

答案 0 :(得分:1)

仅供将来参考,无法动态更改会话状态提供程序。

答案 1 :(得分:0)

它不是......完全正确..你可以使用反射这样做:

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);

的引用:
Dynamic session state provider
http://www.answerandquestion.net/questions/4447903/dynamic-session-state-provider