Вопрос по asp.net-mvc-3 – Autofac MultiTenant - как мне перенаправить на поддомен?

1

N00B здесь. Повторно задавая вопрос, потому что я не пометил его правильно.

Я пытаюсь использовать функцию MutliTenant от Autofac. У меня есть пример «работает» из исходных файлов. Я сканировал документы и не могу понять, как "проложить маршрут". арендаторы.

В настоящее время я хотел бы использовать единую кодовую базу для базового приложения CRUD. Приложение CRUD будет использоваться несколькими различными сайтами, просто ориентированными на конкретные сервисы для отдельного сайта.

Я хочу сделать это в конце концов:

codebase.website1.com (Tenant 1) codebase.website2.com (Tenant 2) codebase.website3.com (Tenant 3)

Есть мысли или рекомендации? Благодарю.

@MarcL. Я думал о IIS 7.0, Win 2008 R2. Да, один экземпляр, который будет вызываться веб-сайтом 1, 2 или 3. Таким образом, на веб-сайте 1 будет ссылка на codebase.website1.com и т. Д. Однако каждый пользователь будет проходить проверку подлинности на основе сайта, так что пользователь 2 с веб-сайта 2 не может войти на codebase.website1.com. Я надеюсь, что это имеет смысл. REMESQ
Будет ли это базовое приложение CRUD представлять собой отдельный запущенный экземпляр, который вызывается из кода для разных сайтов? Если так, то какова будет его архитектура? Marc L.

Ваш Ответ

1   ответ
1

Если вы проверитемногопользовательская документация Autofac на вики вы заметите, что способ определения арендатора заключается вITenantIdentificationStrategy, На этой вики-странице приведен пример, показывающий, как получить арендатора из параметра в запросе, например строки запроса.

Достаточно легко изменить пример, чтобы взглянуть на какую-то другую часть запроса - имя хоста, имя домена или что-то еще.

using System;
using System.Web;
using AutofacContrib.Multitenant;

namespace DemoNamespace
{
  public class DomainStrategy : ITenantIdentificationStrategy
  {
    public bool TryIdentifyTenant(out object tenantId)
    {
      tenantId = null;
      try
      {
        var context = HttpContext.Current;
        if(context != null && context.Request != null)
        {
          var site = context.Request.Url.Authority;
          // Here's where you map the site to the tenant ID:
          tenantId = MapTheSiteToTheTenantId(site);
        }
      }
      catch(HttpException)
      {
        // Happens at app startup in IIS 7.0
      }
      return tenantId != null;
    }
  }
}

Очевидно, вам нужно помассировать это, чтобы работать на вас. Как вы выполняете сопоставление, независимо от того, возвращаете ли вы null в качестве идентификатора клиента по умолчанию или нет, и т. Д.

Обратите внимание, что если вы проводите тестирование на основе значения HTTP-запроса, то каждый раз, когда зависимость разрешается и веб-контекст отсутствует, вы получаете зависимости уровня приложения, а не зависимости конкретного клиента ... потому что вы выиграли & apos ; t быть в состоянии идентифицировать арендатора. Вы видите небольшой артефакт этого в блоке catch - если какие-либо зависимости разрешаются при запуске приложения, там не обязательно веб-контекст, поэтому IIS 7.0 выдает HttpException при вызове HttpContext.Current. Вы должны будете проверить такие вещи.

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded REMESQ
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededifError: User Rate Limit Exceeded REMESQ
Error: User Rate Limit Exceeded REMESQ

Похожие вопросы