代码之家  ›  专栏  ›  技术社区  ›  Andomar

在运行时配置ASP.NET会话状态

  •  20
  • Andomar  · 技术社区  · 14 年前

    我们有一个使用SQL Server会话状态的ASP.NET网站。状态配置为 Web.config 像:

    <sessionState mode="SQLServer" sqlConnectionString="data source=TheServer;
        User ID=TheUser;password=ThePassword;" cookieless="false" timeout="480"/>
    

    但有三种环境(开发/分段/生产)。所有其他连接字符串的配置如下:

    <configuration>
        <connectionStrings>
            <add name="Development_Db1" connectionString="..."/>
            <add name="Production_Db1" connectionString="..."/>
        </connectionStrings>
    </configuration>
    

    在运行时,我们根据主机名选择一个连接到数据库。不幸的是,会话状态连接字符串似乎是硬编码的 web.config .

    是否有方法在运行时配置SQL Server会话状态,或使其引用来自 connectionStrings 部分?

    3 回复  |  直到 5 年前
        1
  •  20
  •   mbx    5 年前

    事实证明,这是一种相当简单的方法。会话状态提供一个名为 Partitioning ,您可以在多个SQL服务器上分散您的状态。您可以提供一个函数来根据会话ID(SID)选择SQL Server。诀窍是您可以在一台服务器上使用此功能,只需动态选择服务器即可。

    这个 web.config 配置如下:

    <sessionState mode="SQLServer" 
                  partitionResolverType="YourNamespace.PartitionResolver" 
                  cookieless="false" 
                  timeout="60" />
    

    选择SQL Server的函数如下:

    public class PartitionResolver : IPartitionResolver
    {
        public void Initialize() {}
    
        // The key is a SID (session identifier)
        public String ResolvePartition(Object key)
        {
            return <grab your config here>;
        }
    }
    

    这种方法允许我们继续为生产和开发使用一个web.config。

        2
  •  3
  •   Tyson Nero    14 年前

    如上所述,我认为web.config中不应该同时包含dev和prod连接字符串。您可以使用Web部署项目来解决这个问题。可以使用Web部署项目替换基于生成的配置设置。例如,可以有两个名为connectionStrings.dev.config和connectionStrings.prod.config的外部配置文件。如果您在debug中构建,它将使用dev.config,但是如果您在版本中构建,它将使用prod.config。

    这和08和10有点不同。以下是一些参考资料:

    VS 2008 http://johnnycoder.com/blog/2010/01/07/deploy-aspnet-web-applications-with-web-deployment-projects/

    VS 2010 http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx

        3
  •  1
  •   Dave Swersky    14 年前

    根据本文,您可以自定义会话状态提供程序:

    http://www.exforsys.com/tutorials/asp.net-2.0/asp.net-2.0-customizing-the-session-state-mechanism.html

    此处的信息可用于设计环境感知会话状态提供程序,该提供程序可以根据.config文件中的配置或其他一些环境键选择连接字符串。