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.asaxarchivo 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_Startcaso de su Global.asaxarchivo 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 IAppBuilderinterfaz 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.asaxtodavía se admite junto con la Startupclase OWIN , mientras que ambos pueden hacer cosas similares. Por ejemplo, podría implementar CORS Global.asaxy la autenticación utilizando el middleware OWIN, lo que se vuelve realmente confuso.
Mi regla general es eliminar el Global.asaxarchivo por completo a favor de usarlo Startupcada 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.csarchivo. Allí configura su host y nuevamente especifica su Startupclase donde configura su canalización. El uso de OWIN (mediante el IAppBuilder.UseOwinmé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/…