使用.NET和IIS的多租户SaaS

时间:2014-01-27 12:35:53

标签: asp.net-mvc multi-tenant

我正在尝试创建一个多租户SaaS网站,并且已经阅读了很多关于该主题的主题,但是仍然有一些我不确定的事情。

  1. 大多数示例使用Request.Url.Host来确定租户。问题是检查租户的最佳位置在哪里,是Controller constructor还是global.asax?因为需要检查每个请求,我猜测租户/主机映射应该存储在某个哈希表中吗?

  2. IIS和应用程序池如何适应所有这些,我是否仍然需要为每个租户提供一个IIS站点+应用程序池,但是将这条路径指向同一位置?或者我只需要一个站点+应用程序池?

  3. 对于每个租户网站的身份验证,我猜我们只需将cookie设置为租户域/子域名?

    HttpCookie cookie = FormsAuthentication.GetAuthCookie(username, true); cookie.Domain = "subdomain.domain.com"

  4. 您如何为特定租户缓存数据? HttpRuntime.Cache["CacheData"]这个缓存不适用于每个租户吗?

2 个答案:

答案 0 :(得分:1)

关于这一切的一些想法:

  1. Request.Url.Host很好。您可以使用Global.asax或自己的(抽象)基本控制器(我总是称之为ControllerBase)。我不建议你在你编写的每一个控制器中使用它 - 尝试将所有必需的东西放在某种配置类中并在BaseController的应用程序Start或on Demand上加载它 - 你可以改变这样一个基础的构造函数用于获取租户标识符的类。

  2. 您可以同时执行这两项操作 - 如果您只是将绑定添加到单个站点和应用程序池,这可能是最简单的。

  3. 这是一种方法,但您也可以进行某种基于声明的身份验证,其中包含目标租户

  4. 您可以创建一个依赖于您的租户的缓存(因为您可以定义依赖于登录用户的缓存。

答案 1 :(得分:0)

  1. 我宁愿写自定义HTTP Module
  2. 更好地使用一个应用程序池,因为您不希望为每个新客户进入配置。