有哪些方法可以通过单一代码库支持多个网站?

时间:2009-08-31 14:50:14

标签: asp.net security scalability

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

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

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

我很感激任何帮助...我只是不想在脚下射击自己;我确定之前有人这样做过。

2 个答案:

答案 0 :(得分:1)

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

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

因此,我的网站网址如下所示:

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

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

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

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

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

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

答案 1 :(得分:0)

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