4

Windows Azure で実行する方法で、MVC2 でマルチテナント サイトの開発を開始する方法を知っている人はいますか?

私はこの質問についてよく検索し、理論的な説明を常に見つけます。誰もが簡単に実行できると言いますが、サンプルは見つかりません...

誰かが私にどこから始めればよいか説明できますか?

ありがとう、ジョアン

4

4 に答える 4

5

マルチテナンシーの実装をどのように計画するかによって異なります(たとえば、共通のURL、サブドメイン、カスタムドメイン、または任意の組み合わせで承認を使用する)。ただし、AzureとMVC2ではほぼすべてのアプローチを実行できるはずです。サブドメインではなく、テナントごとにカスタムドメインを使用することを計画している場合は、CNAMEエントリ(Aレコードではなく)を使用して各カスタムドメインをAzureにポイントすることに満足する必要がありますが、通常は問題ありません。

MVCは、さまざまなフレーバーでマルチテナンシーを実装できる多くの拡張ポイントを提供します。主な目標は、ログインまたはURLのいずれかによってユーザーを一意に識別することです。

Azureで実行されているMVC2アプリケーションがあり、リクエストURLを解析してテナントを区別します。これを行うには多くの方法があります。Controllerクラスを拡張して、アプリに一意のテナント情報を提供するというアプローチを採用しました。これにより、必要に応じて、適切なビューなどを表示するための適切なリポジトリ呼び出しを行うことができます。

MultiTenantControllerがどのように見えるかのサンプルを次に示します。

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);
    }
}

上記の実装を使用すると、次のような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が機能するには、テナントは、AzureWebロールのアドレスを指すcustomtenantdomain.comのDNSレコードにwwwのCNAMEエントリが必要です。

于 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 に答える