Мульти-Арендатор в Windows Azure Asp.net MVC2 - PullRequest
4 голосов
/ 07 сентября 2010

Кто-нибудь знает, как я могу начать разработку мультитенантного сайта в MVC2 так, как он работает в Windows Azure?

Я много ищу по этому вопросу, и я всегда нахожу теоретические объяснения, все говорят, что это легко сделать, но я не могу найти ни одного примера ...

Может кто-нибудь объяснить мне, с чего начать?

Спасибо, João

Ответы [ 4 ]

5 голосов
/ 07 сентября 2010

Это зависит от того, как вы планируете внедрить мультитенантность (например, использование авторизации с общими URL-адресами, поддоменами, пользовательскими доменами или любой комбинацией).Но вы должны быть в состоянии сделать практически любой подход с Azure и MVC2.Если вы планируете использовать настраиваемый домен для каждого арендатора, а не поддомен, вам нужно будет использовать записи CNAME (не записи A) для указания каждого настраиваемого домена на Azure, но обычно это не проблема.

MVC предлагает множество точек расширения, где вы можете реализовать мультитенантность в различных вариантах.Основная цель - уникальная идентификация пользователя по имени входа или URL-адресу.

У нас есть приложение MVC2, работающее в Azure, которое анализирует 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), чтобы получить TenantCode с адреса хоста вurl.

Все ваши контроллеры унаследованы от вышеуказанного класса.Затем, чтобы провести различие между арендаторами, вы просто ссылаетесь на 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 арендатору требуется запись CNAME для www в своих записях DNS для customtenantdomain.com.который указывает на адрес веб-роли Azure.

2 голосов
/ 07 сентября 2010

Это чрезвычайно сложно и не то, что нужно воспринимать легкомысленно.Однако взгляните на исходный код проекта Microsoft Orchard.Он имеет полные возможности многопользовательской аренды, если это то, что вам нужно: http://orchard.codeplex.com/

И у них есть сборка, которая работает и в Azure.

1 голос
/ 10 сентября 2010

В этом руководстве мы рассмотрим некоторые аспекты этого, и оно включает в себя полный образец с использованием MVC 2. текст ссылки

0 голосов
/ 02 мая 2013

Во-первых, все ответы очень и очень полезны. Это меняет ваше решение о том, что вы хотите, настраивая свою многопользовательскую среду. Я имею в виду, что самое важное - это идентификация всех арендаторов в вашем приложении, так что есть много путей для решения. Например, вы может удерживать вашего арендатора через субдомены или просмотр URL-адресов. А также, возможно, вы можете хранить свою базу данных мультитената данных.

Есть очень очень полезные посты, написанные Стивом Морганом.

Я помогу вам только для установки запуска мультитенантности. Вот блоги:

  1. Определение арендатора в мультитенантных приложениях Azure - часть 1
  2. Идентификация арендатора в мультитенантных приложениях Azure - часть 2
  3. Идентификация арендатора в мультитенантных приложениях Azure - часть 3

А вот мультитенантные стратегии передачи данных для Windows Azure:

  1. Мультитенантные стратегии данных для Windows Azure - Часть 1
  2. Мультитенантные стратегии данных для Windows Azure - Часть 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...