3

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

4

3 回答 3

1

在这种情况下,我总是查看框架的源代码。首先我找出配置存储会话状态连接字符串的位置,然后我找到它被使用的位置。私有类System.Web.SessionState.SqlSessionState.SqlSessionStateStore有一个方法OneTimeInit(),它读取连接字符串。在这里我注意到有对partiniong的支持,见这里:http: //msdn.microsoft.com/en-us/library/aa478952.aspx。我以前从未听说过这个,但它看起来就像你想要的那样,你可以根据你想要的任何标准将会话状态存储在多个数据库中。顺便说一下问题+1,这是一个很酷的功能。此外,如果它不起作用,您可以尝试实现您自己的 SessionStateStoreProviderBase 实现,该实现是可公开覆盖的。

于 2013-11-22T09:40:10.550 回答
0

由于会话状态连接不是由您的代码管理的,因此您无法切换它。它是应用程序级别的配置和超出代码控制的范围。但不应该出现这种需要。单个服务器将能够管理您拥有的所有三个域的会话状态。唯一的问题可能是当用户从 shop1.com 移动到 shop2.com 并且仍然保留旧会话时。

于 2013-11-15T14:56:36.057 回答
0

是否有某些原因您不会考虑将(我假设是相同的代码)作为三个独立的 Web 应用程序运行?

  • 一个错误不会关闭所有三个站点
  • 会话状态由应用程序分隔
  • 允许扩展能力站点可以根据增长要求分配给不同的系统
于 2013-11-20T21:24:09.300 回答