【问题标题】:What are some ways to support multiple websites with a single code base?有哪些方法可以使用单个代码库支持多个网站?
【发布时间】:2009-08-31 14:50:13
【问题描述】:

我正在编写一个非常简单的 ASP.NET MVC Web 应用程序:只有几个 CRUD 页面、一些客户端可以浏览文档的文件夹以及只有 3 或 4 个角色。该网站将用于 B2B 场景,每个客户都将拥有自己的网站。

此时,网站中唯一会改变的东西,从客户端到客户端是内容(即文档,以及他们将看到的数据行)。如果是这种情况,管理所有客户角色的最佳方式是什么?我正在寻找最简单的解决方案,因为这是概念验证,我现在不想投入大量时间。

如果改变的不仅仅是内容呢?也许有些客户会想要一些自定义的静态页面。在这一点上,我唯一的选择是复制整个网站吗?我对此持怀疑态度,因为如果我有很多客户,它会变得难以维护。

我会很感激任何帮助...我只是不想在自己的脚上开枪;我敢肯定以前有人这样做过。

【问题讨论】:

    标签: asp.net security scalability


    【解决方案1】:

    我在 IIS 中为每个客户端创建虚拟目录,它们都指向我的 ASP.NET 代码所在的同一个文件夹。

    这使我能够支持几十个几乎相同的“网站”,每个网站都有自己的数据库,形式基本相同,只是数据不同。

    所以,我的网站 URL 如下所示:

     http://mysite.com/clientacme/
     http://mysite.com/clientbill/
     http://mysite.com/clientcharlie/
    

    我为此制定了两个关键的实现细节:

    1. 我使用虚拟目录文件夹名称来确定我的代码从哪个 DSN 读取。这是通过创建一个简单的静态方法来实现的,该方法将文件夹名称注入到 DSN 字符串模板中。如果您想使用 same 数据库来存储每个人的数据,您可以使用文件夹名称作为查询中的默认过滤器。

    2. 我将每个网站的设置(页眉和页脚、选项、自定义报告的链接等)存储在每个数据库(键、值)的简单“设置”表中,而不是在网络中。配置(共享)。这使我能够随着时间的推移扩展代码库,以便为每个客户定制体验而不需要分叉代码。

    对于用户身份验证,我使用基本身份验证,并将用户名、密码和角色保存在每个数据库的表中。

    重要的是,如果您为每个客户端的内容使用不同的 SQL Server 数据库,您需要编写对数据库表、索引等的任何更改,并将它们应用于所有数据库同时(当然是在测试之后)。一种简单的方法是维护一个 Excel 工作表,其中包含一个数据库名称表和一个位于顶部的大“SQL”单元格。在每个数据库名称旁边,创建一个公式来“使用数据库名称;”然后在顶部连接 SQL 代码。

    【讨论】:

    • 虽然我喜欢这个想法,但我认为维护多个数据库实际上比维护多个站点更难。不过,这绝对值得考虑。
    • 如果你真的需要,你只需要维护多个数据库(我愿意)。同样的事情可以用单个数据库来完成,只需使用列来识别特定数据行与哪个站点相关联,并根据文件夹过滤视图。
    【解决方案2】:

    我不确定这是否完全回答了您的问题,但就维护自定义“静态”页面而言,我发现自己在客户的 MVC 网站上实现了一个系统,客户可以从他们的管理控制面板和每个页面都有一组“PageContent”实体,这些实体由标题和 HTML 内容字段组成(使用 WYISWYG 编辑器填充)。在创建页面时,MVC 应用程序将http://yoursite.com/Page/Page-Url-Specified-By-The-User 映射到该页面并在那里呈现其内容。显然,这些页面是动态的,但据客户所知,他们已经轻松创建了一个全新的自定义页面。

    【讨论】:

    • 好主意。不过,我现在最关心的是角色管理。
    猜你喜欢
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多