在运行时配置ASP.NET会话状态
我们有一个使用SQL Server会话状态的ASP.NET网站。 状态在Web.config
配置如下:
但是有三种环境(开发/升级/生产)。 所有其他连接字符串配置如下:
在运行时,我们选择一个基于主机名连接到数据库。 不幸的是,会话状态连接字符串似乎在web.config
是硬编码的。
有没有办法在运行时配置SQL Server会话状态,或者让它引用connectionStrings
部分中的连接字符串?
事实certificate,有一种相当简单的方法可以做到这一点。 会话状态提供了一种称为分区的function,您可以在其中将状态分布在多个SQL Server上。 您可以提供基于会话ID(SID)选择SQL Server的function。 诀窍是你可以在ONE服务器上使用这个function,只是为了动态选择服务器。
web.config
配置如下所示:
选择SQL Server的function如下所示:
public class PartitionResolver : IPartitionResolver { public void Initialize() {} // The key is a SID (session identifier) public String ResolvePartition(Object key) { return ; } }
这种方法允许我们继续使用一个web.config进行生产和开发。
如上所述,我认为你不应该在web.config中同时拥有dev和prod连接字符串。 您可以使用Web部署项目来解决该问题。 您可以使用Web部署项目根据构建替换配置设置。 例如,您可以拥有一个名为connectionStrings.dev.config和connectionStrings.prod.config的两个外部配置文件。 如果你构建在Debug中,它将使用dev.config,但如果你在Release中构建,它将使用prod.config。
这与VS 08和10略有不同。以下是一些参考:
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
根据这篇文章,您可以自定义会话状态提供程序:
此处的信息可用于设计环境感知会话状态提供程序,该提供程序可以根据.config文件中的配置或某些其他环境密钥选择连接字符串。