二十四画生的Blog


        ——开始学习Orchard框架
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Orchard中的多站点功能(Multi-Tenant)

Posted on 2011-08-28 20:37  二十四画生  阅读(5538)  评论(5编辑  收藏  举报
    当你运行Orchard的时候,通常一个网站运行在一个应用程序域中。这也是一般ASP.NET应用程序区分两个网站的方法,也就是说两个网站,就需要部署两套网站应用程序。然而,Orchard提供了另外一种区分两个网站的方法。在Orchard中引入了多站点的概念(multi-tenancy,直译为多租户,但我觉得翻译为多站点更贴切),允许你在一个ASP.NET应用程序域中同时运行多个站点。从内存使用率的角度来看这是非常有用的,因为应用程序域的初始化、卸载和回收都是非常消耗资源的。在一个单独的应用程序域中运行多个独立的Orchard网站,就可以在一台服务器上配置更多的站点。做为主机托管商无疑会十分青睐这种方式,这样可以大量节约成本。就一般主机空间的租赁用户来说,也可以在一个主机空间中部署多个站点,这样也能省钱。多站点的功能在Windows Azure环境中会表现的更好,因为部署到Azure中就可以轻松支持多个站点了。
备注如果你想在本机测试多站点的功能,请先阅读“在本机测试多站点” 一节然后在来阅读此文章。

 

启用多站点功能

默认多站点功能是没有启用的。要启用多站点功能,可以登录后台管理系统,点击Modules菜单,找到Hosting分类下的Multi Tenancy功能,点击Enable。

 

一旦多站点功能启用,你可以在后台管理系统中看见一个Tenants菜单(Tenants菜单只有在访问默认站点的时候才会出现,而通过子站点访问的时候就没有,这样就保证了只有默认站点的管理员才可以创建子站)。点击进入后可以看见一个Default站点,这是安装Orchard时默认创建的站点。你可以想象Default就像一个租户租了一整栋房子,当然你也可以把这栋房子租给更多的人。

 

添加一个站点

首先,你只会有一个单一的站点,这是默认的站点。
添加一个新的站点,可以点击“Add a Tenant”。
 
  • 在添加站点页面,需要输入站点名称(名称不能包含空格)和站点域名。Orchard将通过用户访问的域名来映射到相应的网站。此外你还可以设置这个站点使用的数据库。共有三种选择:
  • 允许站点自己设置数据库。
  • 使用单独的SQL Server Compact数据库
  • 使用已存在的SQL Server 数据库
当设置好以上属性后,点击“Save”,在站点列表中就可以查看到刚刚添加的站点了。
点击“Set Up”后将将跳转到Orchard安装页面。如果你不是选的“允许站点自己配置数据库”,将不会出现数据库的配置选项。

 

备注
如果你选择数据库的安装选项为使用已有数据库,那么需要填写已有数据库连接串和表前缀。这样就相当于一个网站使用的是一个独立的数据库。我认为这种实现方式要优于DNN那种不把不同站点数据混在一个表中的形式。
 

运行一个站点

每一个站点都可以有自己独有内容项目,启用不同的功能模块、使用不同的主题,进行独特的配置。不过,每一个站点可用的模块都是一样的。这是因为他们都共享同一个网站程序,所以可用模块也一样。在下面的截图中,展现了在不同的站点使用不同的主题的功能。
 

 

你也可以随时停用一个站点,只要在默认站点的Tenants菜单中点击“Suspend”就可以停用相应站点了。停用后也可以点击“Resume”随时启用相应的站点。

删除一个站点

目前,在界面上还没有提供删除站点的按钮。但是你可以在网站的App_Data/Sites目录下找到相应的站点名称同名的子目录,然后将其删除即可。你也可以先把这个目录备份到其他地方,这样如果你想恢复的时候就可以使用它了。 
备注
在Azure上,目前还没有办法删除,除非删除实际的数据库,并从BLOB存储更改配置。
 

在本机测试多站点

如果你希望在本机配置多站点的功能,你首先需要修改一下本机的hosts文件。设置多个指向本机IP地址的域名。Hosts文件通常在 \Windows\System32\drivers\etc\hosts。
用记事本打开这个文件,添加以下记录。
127.0.0.1 t1.myhost.com
127.0.0.1 t2.myhost.com
其次你需要在IIS中绑定这些域名。以IIS 7为例,可以选择相应的Orchard站点,点击右键找到“编辑绑定”项,再网站绑定对话框中添加刚刚在hosts文件中增加的域名。
 
这样你就可以在此Orchard网站中使用新增的两个域名来创建两个新的站点了。

参考文档