And*_*mar 21 c# asp.net session-state
我们有一个使用SQL Server会话状态的ASP.NET网站.状态配置Web.config
如下:
<sessionState mode="SQLServer" sqlConnectionString="data source=TheServer;
User ID=TheUser;password=ThePassword;" cookieless="false" timeout="480"/>
Run Code Online (Sandbox Code Playgroud)
但是有三种环境(开发/分期/生产).所有其他连接字符串配置如下:
<configuration>
<connectionStrings>
<add name="Development_Db1" connectionString="..."/>
<add name="Production_Db1" connectionString="..."/>
</connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在运行时,我们选择一个基于主机名连接到数据库.不幸的是,会话状态连接字符串似乎是硬编码的web.config
.
有没有办法在运行时配置SQL Server会话状态,或者让它引用该connectionStrings
部分的连接字符串?
And*_*mar 20
事实证明,有一种相当简单的方法可以做到这一点.会话状态提供了一种称为分区的功能,您可以在其中将状态分布在多个SQL Server上.您可以提供基于会话ID(SID)选择SQL Server的功能.诀窍是你可以在ONE服务器上使用这个功能,只是为了动态选择服务器.
该web.config
配置是这样的:
<sessionState mode="SQLServer"
partitionResolverType="YourNamespace.PartitionResolver"
cookieless="false"
timeout="60" />
Run Code Online (Sandbox Code Playgroud)
选择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>;
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法允许我们继续使用一个web.config进行生产和开发.