我们有一个使用 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/