切换Sql会话状态数据库

时间:2013-11-15 13:12:09

标签: c# session session-state multi-tenant sql-session-state

我有一个连接到多个数据库的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个站点,具体取决于它们的用法,这样我就可以维护更少的实例。

3 个答案:

答案 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应用程序?

  • 一个错误不会删除所有三个网站
  • 会话状态由应用程序
  • 分隔
  • 允许扩展能力站点可以根据增长指示分配给不同的系统