我有一个连接到多个数据库的Web应用程序实例。根据域名(例如www.shop1.com,www.shop2.com,..),我在实体框架中切换连接字符串。
shop1.com -> Database1
shop2.com -> Database2
shop3.com -> Database3
到目前为止一切顺利。
我也在使用Sql Server会话状态,我想切换会话状态数据库,就像我为我的数据切换数据库一样。
shop1.com -> SessionStateDatabase1
shop2.com -> SessionStateDatabase2
shop3.com -> SessionStateDatabase3
提前感谢您的帮助。
如果您想知道我为什么这样做,请提供更多信息:
其实我正在实施多租户。上面的描述显示了三个站点。事实上,我有超过50个。并且网站的数量将在未来几个月内增长。目前所有站点都是单独部署的,这意味着每当我需要推出补丁或更新时,我会部署所有50个站点。以这种方式维护网站正在成为一场噩梦。所以我考虑在一个实例上放置5到10个站点,具体取决于它们的用法,这样我就可以维护更少的实例。
答案 0 :(得分:1)
在这种情况下,我总是查看框架的源代码。首先,我找出配置存储会话状态连接字符串的位置,然后找到它的使用位置。私有类System.Web.SessionState.SqlSessionState.SqlSessionStateStore
有一个方法OneTimeInit()
,它读取连接字符串。在这里,我注意到支持partiniong,请参见此处:http://msdn.microsoft.com/en-us/library/aa478952.aspx。我之前从未听说过这个,但看起来它确实完全符合您的要求,您可以根据您想要的任何标准将会话状态存储在多个数据库中。顺便提一下这个问题+1,这是一个很酷的功能。此外,如果它不成功,您可以尝试实现自己的SessionStateStoreProviderBase实现,该实现是可公开覆盖的。
答案 1 :(得分:0)
由于会话状态连接不是由您的代码管理的,因此您无法切换它。它是一个应用程序级配置和超越代码控制。但是不应该出现这种需要。单个服务器将能够管理您拥有的所有三个域的会话状态。唯一的问题可能是当用户从shop1.com移动到shop2.com并仍然保留旧会话时。
答案 2 :(得分:0)
是否有一些原因你不会考虑运行(我假设,相同的代码)作为三个单独的Web应用程序?