Esta es mi comprensión de cómo evolucionó el inicio / alojamiento de una aplicación web, ya que todo es bastante confuso de seguir. Un pequeño resumen:
1. ASP.NET clásico: escriba solo el código de la aplicación que se ejecutará en el último paso de la canalización obligatoria de IIS
2. ASP.NET con OWIN: configure un servidor web .NET y escriba el código de su aplicación. Ya no está directamente acoplado a IIS, por lo que ya no estás obligado a usarlo.
3. ASP.NET Core: configure el host y el servidor web para usar y escribir el código de su aplicación. Ya no es obligatorio usar un servidor web .NET si se dirige a .NET Core en lugar del .NET Framework completo.
Ahora entraré un poco más en detalles sobre cómo funciona y qué clases se utilizan para iniciar la aplicación:
ASP.NET clásico
Las aplicaciones ASP.NET clásicas tienen el Global.asax
archivo como punto de entrada. Estas aplicaciones solo se pueden ejecutar en IIS y su código se ejecuta al final de la canalización de IIS (por lo que IIS es responsable de CORS, la autenticación ... incluso antes de que se ejecute su código). Desde IIS 7 puede ejecutar su aplicación en modo integrado que integra el tiempo de ejecución ASP.NET en IIS. Esto permite que su código configure la funcionalidad que antes no era posible (o solo en IIS), como la reescritura de URL en el Application_Start
caso de su Global.asax
archivo o use la nueva <system.webserver>
sección en suweb.config
archivo.
ASP.NET con OWIN
En primer lugar, OWIN no es una biblioteca, sino una especificación de cómo los servidores web .NET (por ejemplo, IIS) interactúan con las aplicaciones web. Microsoft tiene una implementación de OWIN llamada proyecto Katana (distribuida a través de varios paquetes NuGet diferentes). Esta implementación proporciona la IAppBuilder
interfaz con la que se encuentra básicamente componiendo middleware de una manera plug-and-play para crear la tubería para el servidor web (además de solo la tubería ASP.NET en IIS7 + como en el punto anterior) en lugar de estar vinculado a la tubería de IIS (pero ahora usa un componente de middleware para CORS, un componente de middleware para autenticación ...). Debido a esto, su aplicación ya no está específicamente acoplada a IIS y puede ejecutarla en cualquier servidor web .NET, por ejemplo:Startup
clase y algunos componentes de middleware OWIN (OMC) proporcionados por Microsoft. UtilizandoIAppBuilder
- El paquete OwinHost se puede usar para alojar su aplicación con un servidor web Katana.
- El paquete Microsoft.Owin.Host.SystemWeb se usa para alojar su aplicación OWIN en IIS7 + en modo integrado, suscribiendo su middleware a los eventos de vida correctos internamente.
Lo que hace que todo sea tan confuso es que Global.asax
todavía se admite junto con la Startup
clase OWIN , mientras que ambos pueden hacer cosas similares. Por ejemplo, podría implementar CORS Global.asax
y la autenticación utilizando el middleware OWIN, lo que se vuelve realmente confuso.
Mi regla general es eliminar el Global.asax
archivo por completo a favor de usarlo Startup
cada vez que necesite agregar OWIN.
ASP.NET Core
ASP.NET Core es la próxima evolución y ahora puede apuntar a .NET Core o al .NET Framework completo. Cuando apunta a .NET Core, puede ejecutar su aplicación en cualquier host que admita el estándar .NET. Esto significa que ya no está restringido a un servidor web .NET (como en el punto anterior), sino que puede alojar su aplicación en contenedores Docker, un servidor web Linux, IIS ...
El punto de entrada para una aplicación web ASP.NET Core es el Program.cs
archivo. Allí configura su host y nuevamente especifica su Startup
clase donde configura su canalización. El uso de OWIN (mediante el IAppBuilder.UseOwin
método de extensión) es opcional, pero totalmente compatible .
AreaRegistration.RegisterAllAreas();
Causó un error para mí, ya que este método no se puede usar durante el inicio de esta manera, solo enApplication_Start
. Sin embargo, mi aplicación es una API y este método aparentemente solo es útil para aplicaciones MVC: stackoverflow.com/questions/18404637/…