Ich schrieb Multi-Tenant-Web-Anwendung in MVC2. Das Hinzufügen/Entfernen eines Kontos ist so komplex wie das Hinzufügen/Entfernen einer Zeile in einer Tabelle, da ich mich für eine gemeinsame Datenbank, Shared-Schema-Ansatz, entschieden habe.
Dies ist ein sehr guter Artikel über Multi-Tenant-Datenbank-Design von MSDN: Multi-Tenant Data Architecture
Alles, was ich in MVC zu tun hatte, ist richtig Routing einzurichten, so dass der erste Teil des Pfades ist Kontoname :
- www.yourdomain.com/Account1/...
- www.yourdomain.com/Account2/...
- www.yourdomain.com/Account3/...
und ich habe einen benutzerdefinierten MvcHandler zum Nachschlagen Konto für jede Anforderung:
public class AccountMvcHandler : MvcHandler
{
public AccountModel Account { get; set; }
public AccountMvcHandler(RequestContext requestContext)
: base(requestContext)
{
}
protected override IAsyncResult BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, object state)
{
string accountName = this.RequestContext.RouteData.GetRequiredString("account");
Account = ServiceFactory.GetService<IAccountService>().GetAccount(accountName);
// URL doesn't contain valid account name - redirect to login page with Account Name textbox
if (Account == null)
httpContext.Response.Redirect(FormsAuthentication.LoginUrl);
return base.BeginProcessRequest(httpContext, callback, state);
}
}
Wie es von Andreas Paulsson der Schlüsselbegriff ist „benutzerdefinierter Assembly“ gesagt wurde. Warum benötigen Sie "Custom Assemblies" für die Konfiguration?Verwenden Sie CodeEmit? Werden Benutzer sie hochladen? Ich würde eher darüber nachdenken, Windows Workflow Foundation für jede kundenspezifische Business Logic-Anpassung zu verwenden.
Ich zweitens, der Schlüsselsatz ist "benutzerdefinierte Baugruppen". –
Ok, ich bin definitiv bereit, das zu berücksichtigen, aber ich habe ein paar Bedenken. Einer - die Anwendungen sollten alle dieselbe Wurzel-URL haben ... ist das überhaupt möglich? Zwei - das Erstellen und Löschen muss automatisch sein ... sollte ich WMI dafür verwenden? Ich weiß nicht, wie ich darüber denke ... Und wie viele Webapps unterstützt IIs überhaupt? Wird das in einer Hardware-Wolke skalieren, da die Beschränkung dort das Os wäre? Drei - wir möchten, dass diese Lösung Azure-kompatibel (aber nicht Azure-spezifisch) ist. Wie also würde ich Azure verwalten? – Jeff
Wie würden Sie auch die Verwendung von freigegebenen Ressourcen (Seiten) empfehlen? Ein VirtualPathProvider, der die Seite aus freigegebenen DLLs extrahiert? – Jeff