web-dev-qa-db-fra.com

Quelle est la différence entre IWebHost WebHostBuilder BuildWebHost

La documentation de Microsoft est absolument terrible. Je dois déployer une application Web .net core 2 que j'ai développée sur un serveur IIS et je ne peux pas obtenir de réponse directe sur quoi que ce soit. Ce n'est que le début de mes questions.

Quelle est la différence entre IWebHost, WebHostBuilder et BuildWebHost?

Merci!

10
Djig Studios

Tout d'abord, permettez-moi de commencer par le fait que je ne suis pas du tout d'accord avec votre affirmation: la documentation sur ASP.NET Core est en fait très bonne. Oui, il manque peut-être encore certains détails, et il a également des problèmes à rattraper les changements avec les versions, mais dans l'ensemble, le contenu est vraiment bon et l'équipe qui y travaille fait vraiment un travail remarquable. Il est vraiment difficile de créer une documentation pour un cadre aussi vaste et évoluant rapidement, et la quantité d'informations que vous obtenez grâce à la documentation est en fait très bonne. Vous aurez probablement l'occasion de reconnaître qu'une fois que vous avez surmonté les problèmes initiaux en commençant avec un nouveau cadre.

Mais revenons à votre question:

  • IWebHost : L'hôte Web est la chose générale qui héberge et exécute votre application Web. Il est créé au démarrage de votre application, puis il construira toutes les pièces nécessaires, comme le serveur Web Kestrel, le pipeline de middleware d'application et tous les autres bits, et les connectera, afin que votre application soit prête à répondre à vos demandes. .

    L'hébergeur Web est essentiellement l'élément qui compose votre application Web.

  • IWebHostBuilder : Le constructeur d'hôte Web est essentiellement une usine pour créer un hôte Web. C'est la chose qui construit l'hôte Web mais configure également tous les bits nécessaires dont l'hôte Web a besoin pour déterminer comment exécuter l'application Web.

    Avec ASP.NET Core 2, vous créerez généralement un "constructeur d'hôte Web par défaut" qui sera déjà livré avec de nombreux paramètres par défaut. Par exemple, l'hôte Web par défaut configurera le serveur Web Kestrel, activera et configurera la journalisation et ajoutera la prise en charge de la configuration appsettings.json.

    Habituellement, vos applications démarreront toujours avec un tel hôte Web par défaut et vous utiliserez ensuite simplement le générateur Hôte Web pour configurer ensuite l'hôte Web avant qu'il ne soit réellement construit.

  • BuildWebHost fait partie de l'ancienne convention avant ASP.NET Core 2.1 où le modèle par défaut dans Program.cs était de construire l'hôte Web dans une méthode distincte. Avec 2.1, cela a été changé pour que la méthode ne construise plus plus l'hôte Web directement mais juste crée le générateur d'hôte Web (d'où la méthode qui s'appelle maintenant CreateWebHostBuilder). Donc, fondamentalement, l'appel .Build() sur le générateur d'hôte Web a été refactorisé hors de la méthode. Vous pouvez le voir bien dans le guide de migration pour 2.0 vers 2.1 .

    La raison pour laquelle cela a été fait est de rendre le CreateWebHostBuilder réutilisable. La configuration du générateur qui se produit dans cette méthode est essentiellement tout ce qui est nécessaire pour configurer l'hôte Web. Donc, en le rendant réutilisable, sans générer d'hôte Web réellement créé, il peut être utilisé à d'autres fins. Dans ce cas, cela a été fait pour les tests d'intégration à l'aide de TestHost. L'hôte de test hébergera essentiellement l'hôte Web en interne pour vos tests d'intégration, et il le fera en recherchant la méthode CreateWebHostBuilder.

De nos jours, le modèle par défaut que vous voyez dans le Program.cs Depuis ASP.NET Core 2.1 est le suivant (commentaires ajoutés par moi pour plus d'explications):

public class Program
{
    // main entry point for your application
    public static void Main(string[] args)
    {
        // create the web Host builder
        CreateWebHostBuilder(args)
            // build the web Host
            .Build()
            // and run the web Host, i.e. your web application
            .Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        // create a default web Host builder, with the default settings and configuration
        WebHost.CreateDefaultBuilder(args)
            // configure it to use your `Startup` class
            .UseStartup<Startup>();
}

Btw. ce sujet est généralement traité dans les sections démarrage de l'application et hébergement de la documentation officielle.

27
poke