Este é o meu entendimento de como o início / hospedagem de um aplicativo Web evoluiu, pois é bastante confuso para seguir. Um pequeno resumo:
1. ASP.NET clássico: escreva apenas o código do aplicativo a ser executado na última etapa do pipeline obrigatório do IIS
2. ASP.NET com OWIN: configure um servidor da Web .NET e escreva o código do aplicativo. Como não está mais diretamente associado ao IIS, não é mais necessário usá-lo.
3. ASP.NET Core: configure o host e o servidor da web para usar e escrever o código do aplicativo. Não é mais obrigatório usar um servidor da Web .NET se você segmentar o .NET Core em vez do .NET Framework completo.
Agora, vou detalhar um pouco mais como ele funciona e quais classes são usadas para iniciar o aplicativo:
ASP.NET clássico
Aplicativos clássicos do ASP.NET têm o Global.asax
arquivo como ponto de entrada. Esses aplicativos podem ser executados apenas no IIS e seu código é executado no final do pipeline do IIS (portanto, o IIS é responsável pelo CORS, pela autenticação ... antes mesmo que o seu código seja executado). Desde o IIS 7, você pode executar seu aplicativo no modo integrado, que integra o tempo de execução do ASP.NET ao IIS. Isso permite que seu código configure funcionalidades que antes não eram possíveis (ou apenas no IIS), como a reescrita de URL no Application_Start
caso do seu Global.asax
arquivo ou use a nova <system.webserver>
seção do web.config
arquivo.
ASP.NET com OWIN
Antes de tudo, o OWIN não é uma biblioteca, mas uma especificação de como os servidores da Web .NET (por exemplo, IIS) interagem com os aplicativos da Web. A própria Microsoft possui uma implementação do OWIN chamada projeto Katana (distribuída por vários pacotes NuGet diferentes). Essa implementação fornece a IAppBuilder
interface que você encontra em uma Startup
classe e alguns OMCs (componentes de middleware) fornecidos pela Microsoft. UsandoIAppBuilder
você basicamente compõe o middleware de forma plug-and-play para criar o pipeline para o servidor da Web (além do pipeline do ASP.NET no IIS7 +, como no ponto acima), em vez de estar vinculado ao pipeline do IIS (mas agora você usa um componente de middleware para CORS, um componente de middleware para autenticação ...). Por esse motivo, seu aplicativo não está mais associado especificamente ao IIS e você pode executá-lo em qualquer servidor Web .NET, por exemplo:
- O pacote OwinHost pode ser usado para auto-hospedar seu aplicativo com um servidor da Web Katana.
- O pacote Microsoft.Owin.Host.SystemWeb é usado para hospedar seu aplicativo OWIN no IIS7 + no modo integrado, assinando internamente o seu middleware para os eventos de duração corretos.
O que torna tudo tão confuso é que Global.asax
ainda é suportado junto com a Startup
classe OWIN , enquanto ambos podem fazer coisas semelhantes. Por exemplo, você pode implementar o CORS Global.asax
e a autenticação usando o middleware OWIN, o que se torna realmente confuso.
Minha regra geral é remover o Global.asax
arquivo em geral, em favor do uso Startup
sempre que eu precisar adicionar o OWIN.
ASP.NET Core
O ASP.NET Core é a próxima evolução e agora você pode segmentar o .NET Core ou o .NET Framework completo. Ao direcionar o .NET Core, você pode executar seu aplicativo em qualquer host que suporte o .NET Standard. Isso significa que você não está mais restrito a um servidor web .NET (como no ponto anterior), mas pode hospedar seu aplicativo em contêineres Docker, um servidor web linux, IIS ...
O ponto de entrada para um aplicativo Web ASP.NET Core é o Program.cs
arquivo. Lá você configura seu host e especifica novamente sua Startup
classe onde você configura seu pipeline. O uso do OWIN (usando o IAppBuilder.UseOwin
método de extensão) é opcional, mas é totalmente suportado .
AreaRegistration.RegisterAllAreas();
Causou um erro para mim, pois esse método não pode ser usado durante a inicialização como esta, apenas emApplication_Start
. No entanto, meu aplicativo é uma API e esse método aparentemente é útil apenas para aplicativos MVC: stackoverflow.com/questions/18404637/…