Napisałem aplikację internetową dla wielu dzierżawców w MVC2. Dodawanie/usuwanie konta jest tak złożone, jak dodawanie/usuwanie wiersza w tabeli, ponieważ wybrałem udostępnioną bazę danych, współużytkowane podejście do schematu.
Jest to bardzo dobry artykuł o multi-tenant projektowania baz danych z MSDN: Multi-Tenant Data Architecture
Wszystko co musiałem zrobić w MVC jest skonfigurować routing prawidłowo, więc pierwsza część ścieżki jest nazwa konta :
- www.yourdomain.com/Account1/...
- www.yourdomain.com/Account2/...
- www.yourdomain.com/Account3/...
i mam niestandardowy MvcHandler dla patrząc konto dla każdego żądania:
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);
}
}
Jak to zostało powiedziane przez Andreas Paulsson kluczem fraza to „niestandardowe zespoły”. Dlaczego potrzebujesz "niestandardowych złożeń" do konfiguracji?Czy używasz CodeEmit? Czy użytkownicy będą je przesyłać? Wolałbym pomyśleć o użyciu Windows Workflow Foundation dla każdej specyficznej dla klienta dostosowywania logiki biznesowej.
Po drugie, fraza kluczowa to "niestandardowe złoŜenia". –
Ok, zdecydowanie chcę to rozważyć, ale mam kilka obaw. Jeden - wszystkie aplikacje powinny mieć ten sam główny adres URL ... czy to jest możliwe? Dwa - tworzenie i usuwanie musi być automatyczne ... czy powinienem używać do tego WMI? Nie wiem, co o tym myślę ... A ilu webappów wspierają IIs? Czy ta skala będzie w chmurze sprzętu, skoro ograniczenie będzie miało os? Trzy - chcemy, aby to rozwiązanie było zgodne z Azure (ale nie na platformie Azure), więc jak mam go zarządzać w systemie Azure? – Jeff
Co więcej, jak radzisz z obsługą zasobów udostępnionych (stron)? VirtualPathProvider, który wyodrębnia stronę z udostępnionych bibliotek dll? – Jeff