C'est ainsi que j'ai compris l'évolution du démarrage et de l'hébergement d'une application web, car tout cela est assez confus à suivre. Un petit résumé :
1. ASP.NET classique : N'écrivez que le code de l'application à exécuter dans la dernière étape du pipeline IIS obligatoire.
2. ASP.NET avec OWIN : Configurez un serveur Web .NET et écrivez le code de votre application. N'est plus directement couplé à IIS, vous n'êtes donc plus obligé de l'utiliser.
3. ASP.NET Core : Configurez l'hôte et le serveur web à utiliser et écrivez le code de votre application. Il n'est plus obligatoire d'utiliser un serveur Web .NET si vous ciblez .NET Core au lieu du .NET Framework complet.
Je vais maintenant vous expliquer un peu plus en détail comment cela fonctionne et quelles classes sont utilisées pour démarrer l'application :
ASP.NET classique
Les applications ASP.NET classiques ont le Global.asax
comme point d'entrée. Ces applications ne peuvent être exécutées que dans IIS et votre code est exécuté à la fin du pipeline IIS (IIS est donc responsable de CORS, de l'authentification... avant même l'exécution de votre code). Depuis IIS 7, vous pouvez exécuter votre application en mode intégré qui intègre le runtime ASP.NET dans IIS. Cela permet à votre code de configurer des fonctionnalités qui n'étaient pas possibles auparavant (ou seulement dans IIS lui-même) telles que réécriture de l'URL dans le Application_Start
l'événement de votre Global.asax
ou utiliser le nouveau fichier <system.webserver>
dans votre web.config
fichier.
ASP.NET avec OWIN
Tout d'abord OWIN n'est pas une bibliothèque mais une spécification de la manière dont les serveurs web .NET (par exemple IIS) interagissent avec les applications web. Microsoft dispose elle-même d'une implémentation d'OWIN appelée projet Katana (distribué par plusieurs paquets NuGet différents). Cette implémentation fournit le IAppBuilder
que vous rencontrez dans une Startup
et certains composants middleware OWIN (OMC) fournis par Microsoft. Utilisation de IAppBuilder
vous composez essentiellement un middleware de manière plug-and-play pour créer le pipeline du serveur Web (en plus du pipeline ASP.NET dans IIS7+ comme dans le point ci-dessus) au lieu d'être lié au pipeline IIS (mais maintenant vous utilisez un composant middleware pour CORS, un composant middleware pour l'authentification...). De ce fait, votre application n'est plus spécifiquement liée à IIS et vous pouvez l'exécuter sur n'importe quel serveur Web .NET, par exemple :
- Le site OwinHost peut être utilisé pour auto-héberger votre application avec un serveur web Katana.
- Le site Microsoft.Owin.Host.SystemWeb est utilisé pour héberger votre application OWIN dans IIS7+ en mode intégré, en abonnant votre intergiciel aux événements de durée de vie corrects en interne.
La chose qui rend tout si confus est que Global.asax
est toujours pris en charge avec le système OWIN Startup
alors qu'ils peuvent tous deux faire des choses similaires. Par exemple, vous pouvez implémenter CORS dans Global.asax
et l'authentification en utilisant le middleware OWIN qui devient vraiment déroutant.
Ma règle d'or est d'enlever le Global.asax
en faveur de l'utilisation du fichier Startup
chaque fois que j'ai besoin d'ajouter OWIN.
ASP.NET Core
ASP.NET Core est la prochaine évolution et vous pouvez désormais cibler soit .NET Core soit le .NET Framework complet. Lorsque vous ciblez .NET Core, vous pouvez exécuter votre application sur tout hôte prenant en charge la norme .NET. Cela signifie que vous n'êtes plus limité à un serveur Web .NET (comme dans le point précédent), mais que vous pouvez héberger votre application dans des conteneurs Docker, un serveur Web Linux, IIS...
Le point d'entrée d'une application web ASP.NET Core est l'élément Program.cs
fichier. Là, vous configurez votre hôte et vous spécifiez à nouveau votre Startup
où vous configurez votre pipeline. En utilisant OWIN (en utilisant le IAppBuilder.UseOwin
) est facultative, mais entièrement soutenu .
0 votes
AreaRegistration.RegisterAllAreas();
Cela m'a causé une erreur, car cette méthode ne peut pas être utilisée au cours du démarrage, mais seulement dans les cas suivantsApplication_Start
. Cependant, mon application est une API et cette méthode n'est apparemment utile que pour les applications MVC : stackoverflow.com/questions/18404637/