我们有一个使用 SQL Server 会话状态的 ASP.NET 网站。状态配置在Web.config
like:
<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 会话状态,或者使其引用来自 SQL Server 的连接字符串connectionStrings
部分?
事实证明,有一种相当简单的方法可以做到这一点。会话状态提供了一个称为分区 https://web.archive.org/web/20130111000949/http://msdn.microsoft.com/en-us/magazine/cc163730.aspx,您可以在其中将状态分布到多个 SQL Server。您可以提供一个函数来根据会话 ID (SID) 选择 SQL Server。诀窍在于,您可以在一台服务器上使用此功能,只需动态选择服务器即可。
The 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 进行生产和开发。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)