我们有一个使用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
部分中的连接字符串?
发布于 2011-01-23 08:48:55
事实证明,有一种相当简单的方法可以做到这一点。会话状态提供了一种称为Partitioning的功能,您可以在该功能中将状态分散到多个SQL Servers上。您可以提供一个根据会话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进行生产和开发。
发布于 2010-10-20 01:21:57
如上所述,我认为您不应该在web.config中同时拥有开发和生产连接字符串。您可以使用Web部署项目来解决这个问题。可以使用web部署项目来替换基于生成的配置设置。例如,您可以有两个名为connectionStrings.dev.config和connectionStrings.prod.config的外部配置文件。如果你在Debug中构建,它将使用dev.config,但如果你在Release中构建,它将使用prod.config。
它与VS08和VS10略有不同。下面是一些参考:
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
发布于 2010-10-20 00:04:48
根据本文,您可以自定义会话状态提供程序:
这里的信息可用于设计环境感知会话状态提供程序,该提供程序可以根据.config文件中的配置或其他一些环境键选择连接字符串。
https://stackoverflow.com/questions/3969528
复制相似问题