c# - 在运行时配置 ASP.NET session 状态

标签 c# asp.net session-state

我们有一个使用 SQL Server session 状态的 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>

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

有没有办法在运行时配置 SQL Server session 状态,或者让它引用 connectionStrings 部分的连接字符串?

最佳答案

事实证明,有一种相当简单的方法可以做到这一点。 session 状态提供了一个名为 Partitioning 的功能,您可以在其中将状态分布到多个 SQL Server。您可以提供一个函数来根据 session 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 进行生产和开发。

关于c# - 在运行时配置 ASP.NET session 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969528/

相关文章:

C# 应用程序被防病毒软件阻止?

c# - 将 DbContext 与回发一起使用?

c# - 在 ASP.NET MVC 上检测 session 过期

javascript - 刷新后保持全局变量处于事件状态,javascript

c# - 在 using 语句中使用 null IDisposable 值

c# - 使用不同的规则从 Excel 导入不同的文件

c# - 来自 response.write() 的 ASP.net C# 文本未按我的意愿显示

asp.net - 连接字符串应存储在n层asp.net应用程序中的何处

ASP.NET session 状态和多个工作进程

c# - C#应用程序错误处理的问题