繁体   English   中英

windows azure asp.net MVC2中的多租户

[英]Multi-Tenant in windows azure asp.net MVC2

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

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

有人可以解释我从哪里开始?

谢谢,João

这取决于您计划如何实施多租户(例如,使用具有公共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函数只是知道如何以安全的方式解析URL的任何实现。
  2. _tenantService可以访问某种持久性存储(在我们的例子中为Azure Tables),以从url中的主机地址获取TenantCode。

所有控制器都将继承上述类。 然后,为了区分租户,您只需在控制器中引用TenantCode ,如下所示:

public class HomeController : MultiTenantController {
    ...

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

使用上述实现,您可以将不同的站点或数据提供给以下URL:
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条目。

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

他们也有一个在Azure中运行的构建。

在本指南中,我们将介绍这方面的内容,并包含使用MVC 2 链接文本的完整示例

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

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

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

  1. 识别多租户Azure应用程序中的租户 - 第1部分
  2. 识别多租户Azure应用程序中的租户 - 第2部分
  3. 识别多租户Azure应用程序中的租户 - 第3部分

以下是Windows Azure的多租户数据策略:

  1. Windows Azure的多租户数据策略 - 第1部分
  2. Windows Azure的多租户数据策略 - 第2部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM