使用web.config共享会话状态而不是反射

时间:2012-11-11 15:35:00

标签: c# asp.net session reflection web-config

我在两个不同的asp.net Web应用程序中共享会话变量。

我正在使用“StateServer”模式。

对于共享,我为使用反射的应用程序设置 HttpRuntime _appDomainAppId 。在 Application_Start 函数中,这是我的代码:

            string applicationName = "mysite"

            FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime",
                BindingFlags.Static | BindingFlags.NonPublic);
            HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
            FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId",
                BindingFlags.Instance | BindingFlags.NonPublic);
            appNameInfo.SetValue(theRuntime, applicationName);

这是我的问题:我不想为此使用反射。我想在web.config中处理这个问题。

有没有办法在web.config中设置 _appDomainAppId ?我无法在httpRuntime部分或其他任何地方找到任何内容。

谢谢。

1 个答案:

答案 0 :(得分:0)

_appDomainAppdId的可访问对象是AppDomainAppId。初始化后没有提供手动设置AppDomainAppId的方法。 (该属性是只读的。)

对于共享会话状态,您将要使用其他会话状态提供程序。您可以在此选项,会话状态服务,SQL或自定义之间进行选择。

讨论了为共享状态黑客攻击SQL会话状态提供程序here。 (从2007年开始,我最近(2017年)对此进行了研究,但仍然适用。)

讨论了构建自定义会话状态提供程序here