4

任何人都知道我怎样才能开始在 MVC2 中开发一个多租户站点,以使其在 Windows Azure 上运行?

我搜索了很多关于这个问题,我总是找到理论解释,每个人都说这很容易做到,但我没有找到任何示例......

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

谢谢,若昂

4

4 回答 4

5

这取决于您计划如何实施多租户(例如,使用通用 url、子域、自定义域或任何组合的授权)。但是您应该能够使用 Azure 和 MVC2 执行任何方法。如果您计划为每个租户使用一个自定义域,而不是一个子域,您将需要对使用 CNAME 条目(而不是 A 记录)将每个自定义域指向 Azure 感到满意,但这通常不是问题。

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

我们在 Azure 中运行了一个 MVC2 应用程序,它解析请求 url 以区分租户。有很多方法可以做到这一点。我们采用扩展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 表)以从 url 中的主机地址获取 TenantCode。

您的所有控制器都将从上述类继承。然后,为了区分租户,您只需引用控制器中的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 正常工作,租户需要在其 customtenantdomain.com 的 DNS 记录中为 www 提供一个 CNAME 条目,该条目指向你的 Azure Web 角色的地址。

于 2010-09-07T17:10:19.563 回答
2

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

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

于 2010-09-07T14:16:47.613 回答
1

在本指南中,我们涵盖了这方面的各个方面,其中包括使用 MVC 2 的完整示例。 链接文本

于 2010-09-10T12:06:36.680 回答
0

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

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

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

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

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

  1. 适用于 Windows Azure 的多租户数据策略 - 第 1 部分
  2. 适用于 Windows Azure 的多租户数据策略 - 第 2 部分
于 2013-05-02T14:58:36.610 回答