2

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

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

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

谢谢,

4

2 回答 2

1

仅供将来参考,不可能动态更改会话状态提供程序。

于 2012-11-06T12:02:07.500 回答
1

这不是.. 完全正确.. 你可以使用反射来做到这一点:

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

于 2016-04-01T09:45:54.633 回答