【问题标题】:Multi-Tenant in windows azure asp.net MVC2windows azure asp.net MVC2中的多租户
【发布时间】:2011-04-09 02:31:21
【问题描述】:

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

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

谁能解释我从哪里开始?

谢谢, 若昂

【问题讨论】:

  • 我根据我认为您的要求回答了它。如果您正在寻找其他东西,请告诉我。

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


【解决方案1】:

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

Steve Morgan 写了非常非常有用的帖子。

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

  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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这取决于您计划如何实施多租户(例如,使用通用 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 表)到 从主机获取租户代码 网址中的地址。

      您的所有控制器都将从上述类继承。然后,为了区分租户,您只需引用控制器中的 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 角色的地址。

      【讨论】:

      • 感谢您的回复。有用!
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-21
        • 2016-05-16
        • 1970-01-01
        相关资源
        最近更新 更多