【问题标题】:How to setup single-code multiple-database ASP.NET SaaS application如何设置单代码多数据库 ASP.NET SaaS 应用程序
【发布时间】:2012-06-01 06:11:00
【问题描述】:

我正在构建一个 SaaS 应用程序,我想保留我拥有的单一代码库。我想在单独的子域 cust1.saascompany.com、cust2.saascompany.com 等中。 但是,我没有任何 TenantID,并且出于多种原因,我更愿意为每个客户保留单独的数据库(主要的一个原因是它已经以这种方式编码,并且在使用保证之前更改它没有意义)。数据库中包含用户登录成员资格。

我猜我需要单独的 web.configs 用于连接字符串?或者我应该创建一个单独的数据库来存储所有连接字符串和任何应用程序级变量/常量?最终,我希望能够自动执行此配置(同样,当使用需要时)。

是否有任何人可以向我指出有关如何通过步骤进行设置的文章或帖子?我找不到我要找的东西。

【问题讨论】:

  • 哦,每个客户端都有一个单独的数据库是我们产品的工作方式,一个用户登录数据库来存储连接字符串。 PS 想想部署自动化,在部署之夜升级 300+ db 很有趣。

标签: asp.net sql-server saas


【解决方案1】:

从技术上讲,这很简单。我们多年来一直这样做。尽管我们使用不同的约定(my.domain.com/cust1my.domain.com/cust2 加上 url 重写),但这并没有改变任何东西。

所以,这就是你要做的。您创建一个连接字符串提供者的抽象规范:

public interface ICustomerInformationProvider
{
    string GetConnectionString( string CustomerId );  
    ... // perhaps other information
}

然后你提供任何你想要的实现:

public class WebConfigCustomerInformationProvider : ICustomerInformationProvider { ... }
public class DatabaseConfigCustomerInformationProvider : ICustomerInformationProvider { ... }
public class XmlConfigCustomerInformationProvider : ICustomerInformationProvider { ... }

然后您以某种方式将您的接口映射到实现上(例如,使用您选择的 IoC 容器)。

这使您有机会在部署期间配置提供程序,例如,开发人员可以使用一个提供程序(从文件中读取连接字符串),而在生产环境中使用另一个提供程序(从数据库中读取连接字符串)可以轻松配置)。

如果您还有其他问题,请随时提出。

【讨论】:

  • @wiktor_zychla,感谢您的回复。看起来你说的是对的,但我不知道如何使它工作的细节。我还应该问,“我如何拥有一个包含多个子域的代码库”?我错过了那条信息。有什么建议吗?
  • 您为多个主机头设置了 IIS 应用程序。这应该很容易。然后,在处理管道中,检查Request.Uri 以发现请求的主机头是什么。
猜你喜欢
  • 2017-06-24
  • 2016-04-19
  • 1970-01-01
  • 2012-11-08
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
相关资源
最近更新 更多