Escribí la aplicación web multi-tenant en MVC2. Agregar/Eliminar una cuenta es tan complejo como agregar/eliminar una fila en una tabla cuando opté por la base de datos compartida, enfoque de esquema compartido.
Este es un artículo muy bueno sobre el diseño de la base de datos de múltiples usuarios de MSDN: Multi-Tenant Data Architecture
Todo lo que tenía que hacer en MVC es configurar el enrutamiento correctamente, por lo que la primera parte de la ruta es el nombre de cuenta :
- www.yourdomain.com/Account1/...
- www.yourdomain.com/Account2/...
- www.yourdomain.com/Account3/...
y tengo una MvcHandler personalizada para buscar la cuenta para cada solicitud:
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);
}
}
como fue dicho por Andreas Paulsson la frase clave es "ensamblados personalizados". ¿Por qué necesita 'ensambles personalizados' para la configuración?¿Estás usando CodeEmit? ¿Los usuarios los subirán? Preferiría pensar en usar Windows Workflow Foundation para cualquier personalización de lógica de negocio específica del cliente.
En segundo lugar, la frase clave es "ensambles personalizados". –
Ok, definitivamente estoy dispuesto a considerar eso, pero tengo algunas preocupaciones. Uno: todas las aplicaciones deberían tener la misma URL raíz ... ¿es esto posible? Dos: la creación y la eliminación deben ser automáticas ... ¿Debería usar WMI para eso? No sé cómo me siento acerca de eso ... ¿Y cuántos webapps admite II de todos modos? ¿Esa escala en una nube de hardware, ya que la limitación sería el sistema operativo? Tres: queremos que esta solución sea compatible con Azure (pero no específica de Azure), entonces, ¿cómo podría administrarla para Azure? – Jeff
Además, ¿cómo recomendaría el manejo de recursos compartidos (páginas)? Un VirtualPathProvider que extrae la página de dlls compartidos? – Jeff