windows azure asp.net MVC2中的多租户

时间:2010-09-07 09:00:44

标签: asp.net asp.net-mvc-2 azure multi-tenant

任何人都知道如何开始在MVC2中开发多租户网站,以及在Windows Azure上运行的方式?

我搜索了很多关于这个问题,我总是找到理论解释,每个人都说它很容易完成,但我找不到任何样本...

有人能解释我从哪里开始吗?

谢谢, 若昂

4 个答案:

答案 0 :(得分:5)

这取决于您计划如何实施多租户(例如,使用具有公共URL,子域,自定义域或任何组合的授权)。但是你应该能够使用Azure和MVC2做任何方法。如果您计划为每个租户使用自定义域而不是子域,则需要使用CNAME条目(而不是A记录)将每个自定义域指向Azure,但这通常不是问题。

MVC提供了许多扩展点,您可以在其中实现各种风格的多租户。主要目标是通过登录或URL唯一地标识用户。

我们在Azure中运行了一个MVC2应用程序,它解析请求URL以区分租户。有很多方法可以做到这一点。我们采用扩展 Controller 类的方法为我们的应用程序提供唯一的租户信息,以便我们可以根据需要使用它来进行适当的存储库调用以显示正确的视图等。

以下是MultiTenant Controller的样子:

public class MultiTenantController : Controller {
    public string TenantCode { get; set; }

    protected override void OnActionExecuting(ActionExecutingContext filterContext) {
        TenantCode = GetTenantCode(filterContext.HttpContext.Request);
    }

    private string GetTenantCode(System.Web.HttpRequestBase request) {
        string host = new RequestParser(request.Url.AbsoluteUri).Host;
        return _tenantService.GetTenantCodeByHostAddress(host);
    }
}

备注:

  1. RequestParser 功能 以上就是任何实现 知道如何解析网址中的网址 安全的方式。
  2. _tenantService 可以访问某种持久性 store(在我们的例子中为Azure Tables) 从主机获取TenantCode 地址在网址中。
  3. 所有控制器都将继承上述类。然后,要区分租户,您只需在控制器中引用 TenantCode ,就像这样:

    public class HomeController : MultiTenantController {
        ...
    
        public ViewResult Index() {
            var vm = _homeService.GetHomePageViewModelForTenant(TenantCode);
            return View(vm);
        }
    }
    

    使用上述实现,您可以将不同的网站或数据提供给以下网址:
    http://subtenant1.yourdomain.com
    http://subtenant2.yourdomain.com
    http://www.customtenantdomain.com

    您的后端存储(例如表存储)只需要与租户交叉引用主机名,如下表所示。在上面的代码中, GetTenantCode 会访问数据。

    HostName                TenantCode
    ---------------------- --------------  
    subtenant1              Tenant1ID  
    subtenant2              Tenant2ID  
    www.customtenantdomain  Tenant3ID  
    

    要使www.customtenantdomain.com正常工作,租户需要在其指向Azure Web角色地址的customtenantdomain.com的DNS记录中输入www的CNAME条目。

答案 1 :(得分:2)

它非常复杂,不能轻易接受。但是,请查看Microsoft的Orchard项目的源代码。如果您需要,这具有完整的多租户功能:http://orchard.codeplex.com/

他们的构建版本也适用于Azure。

答案 2 :(得分:1)

在本指南中,我们将介绍这方面的内容,其中包括使用MVC 2的完整示例。 link text

答案 3 :(得分:0)

首先,所有答案都非常有用。它正在改变你想要设置你的多租户的决定。我的意思是最重要的是识别你的应用程序中的所有租户,这样有很多方法可以解决。例如你可以通过子域名或URL冲浪来保存您的租户。也可以存储您的数据多级数据库。

史蒂夫摩根写的非常非常有用的帖子。

我只帮助您设置启动多租户。这是博客:

  1. Identifying the Tenant in Multi-Tenant Azure Applications - Part 1
  2. Identifying the Tenant in Multi-Tenant Azure Applications - Part 2
  3. Identifying the Tenant in Multi-Tenant Azure Applications - Part 3
  4. 以下是适用于Windows Azure的多租户数据策略:

    1. Multi-Tenant Data Strategies for Windows Azure – Part 1
    2. Multi-Tenant Data Strategies for Windows Azure – Part 2