【问题标题】:Change provider connectionstring of sessionState aspnet at runtime在运行时更改 sessionState aspnet 的提供者连接字符串
【发布时间】:2017-08-25 22:31:51
【问题描述】:

为了用

更改 aspnet 成员资格中提供程序的连接字符串

自定义提供程序(nauckit)我使用这个:

 var connectionStringField = Membership.Provider.GetType().GetField("m_connectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        if (connectionStringField != null)
            connectionStringField.SetValue(Membership.Provider, connectionString);

        var roleField = Roles.Provider.GetType().GetField("m_connectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        if (roleField != null)
            roleField.SetValue(Roles.Provider, connectionString);

        var profileField = ProfileManager.Provider.GetType().GetField("m_connectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        if (profileField != null)
            profileField.SetValue(ProfileManager.Provider, connectionString);

connectionstring 是我想要的连接字符串。 但我无法更改 sessionState。

我的网络配置是这样的:

<membership defaultProvider="PgMembershipProvider">
            <providers>
                <clear />
                <add name="PgMembershipProvider" type="NauckIT.PostgreSQLProvider.PgMembershipProvider" connectionStringName="myConnection1" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" maxInvalidPasswordAttempts="100" passwordFormat="Hashed" />
            </providers>
        </membership>
        <roleManager enabled="true" defaultProvider="PgRoleProvider" cacheRolesInCookie="true" cookieName=".AspNetRoles" cookiePath="/" cookieProtection="All" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieTimeout="30" maxCachedResults="25">
            <providers>
                <clear />
                <add name="PgRoleProvider" type="NauckIT.PostgreSQLProvider.PgRoleProvider" connectionStringName="myConnection1" />
            </providers>
        </roleManager>
        <profile enabled="true" defaultProvider="PgProfileProvider">
            <providers>
                <clear />
                <add name="PgProfileProvider" type="NauckIT.PostgreSQLProvider.PgProfileProvider" connectionStringName="myConnection1" />
            </providers>
            <properties>
                <add name="property1" type="long"/>
            </properties>
        </profile>
        <sessionState mode="Custom" customProvider="PgSessionStateStoreProvider">
            <providers>
                <clear />
                <add name="PgSessionStateStoreProvider" type="NauckIT.PostgreSQLProvider.PgSessionStateStoreProvider" enableExpiredSessionAutoDeletion="true" expiredSessionAutoDeletionInterval="60000" enableSessionExpireCallback="false" connectionStringName="myConnection1" />
            </providers>
        </sessionState>

有什么帮助吗? 谢谢!

【问题讨论】:

    标签: asp.net asp.net-membership membership-provider


    【解决方案1】:

    只需在您网站上的任何 IHttpModule 中调用 global.SetStore。

    该死,我很高兴这能奏效。

    Global.asax.cs:

        private FieldInfo StorePrivateMemberInfo  = typeof(SessionStateModule).GetField("_store", BindingFlags.Instance | BindingFlags.NonPublic);
        public void SetStore()
        {
    
            var store = StorePrivateMemberInfo.GetValue(this.Modules["Session"]);
            if (store == null || !(store is Microsoft.Web.SessionState.SqlInMemoryProvider))
            {
                var config = new NameValueCollection();
                var cnn = "Your connection string";
                config.Add("connectionString", cnn);
                config.Add("timeout", "30");
                simp = new Microsoft.Web.SessionState.SqlInMemoryProvider();
                simp.Initialize("SqlInMemoryProvider", config);
                StorePrivateMemberInfo.SetValue(this.Modules["Session"], simp);
            }
    
            Session["GLOBAL_ASAX_CHECK"] = true;
        }
    

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多