3 votes

Construire une application console .NET Core avec un serveur web ASP.NET Core intégré ?

J'ai vu plusieurs tutoriels en ligne sur la création d'une application console .NET Core et sur la création d'une application ASP.NET Core, mais je n'ai pas trouvé quelque chose sur la création d'une application console .NET Core qui commence par une sortie console mais qui contient également une application Web ASP.NET. Dans ce cas, j'écris une application qui fonctionne comme un service Windows ou Linux. Elle fonctionne comme un démon. Je cherche donc à ajouter une interface web ASP.NET Core pour afficher les informations d'état.

Y a-t-il un moyen recommandé de le faire ? Je suppose que je dois créer un WebHostBuilder et créer mon nouveau WebHost avec .Build() Mais dois-je créer un nouveau projet pour cela et le référencer à partir de mon projet d'application console ? Si c'est le cas, quel SDK dois-je utiliser pour le projet ? Je ne peux pas utiliser Microsoft.NET.Sdk.Web parce que cela nécessite un Main que je ne veux évidemment pas avoir si elle doit être référencée depuis une application existante qui a sa propre Main mais si j'utilise la méthode Microsoft.NET.Sdk.Razor j'ai l'impression d'avoir un tas de conflits de versions de dépendances et d'erreurs du genre :

Conflit de version détecté pour Microsoft.Extensions.Configuration.Abstractions. Installez/référencez Microsoft.Extensions.Configuration.Abstractions 2.1.1 directement sur le projet MonProjet pour résoudre ce problème.

J'ai donc l'impression de passer à côté de quelque chose de fondamental ; quelle est exactement la meilleure pratique pour intégrer une application Web dans une application console dans .NET Core ?

3voto

vinicius.ras Points 1246

Vous pouvez tout à fait installer les paquets ASP.NET Core dans votre projet .NET Core, et construire une WebHost qui sera utilisé comme composant de serveur web dans votre application, comme vous l'avez dit vous-même. Un moyen facile de le faire est d'installer le fichier Métapackage Microsoft.AspNetCore.App qui comprendrait toutes les dépendances de paquetage couramment utilisées pour les applications ASP.NET Core.

Comme les technologies ASP.NET Core dépassent le cadre de ma réponse, je vais utiliser de brefs exemples à partir de maintenant.

Après avoir installé le Microsoft.AspNetCore.App dans votre projet, vous pouvez procéder à la création d'un métapaquet Startup pour initialiser votre serveur, et développer l'application en utilisant les technologies ASP.NET Core. Une simple Startup pour servir d'exemple :

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        /* configure any services you need here */
    }

    public void Configure(IApplicationBuilder app)
    {
        // Output a "hello world" to the user who accesses the server
        app.Use(async (context, next) =>
        {
            await context.Response.WriteAsync("Hello, world!");
        });
    }
}

Vous pouvez ensuite créer un hôte web avec quelque chose comme ça :

IWebHost myHost = WebHost.CreateDefaultBuilder()
    .UseStartup<Startup>()
    .Build();

Enfin, vous devez appeler le Run() pour que votre hôte web s'exécute et commence à écouter les connexions :

myHost.Run();

Lancez l'application et le serveur fonctionnera avec des configurations par défaut (probablement sous le nom de http://localhost:5000/ l'adresse et le port du serveur seront imprimés dans la sortie de votre console par défaut). Essayez d'accéder au serveur par le biais de votre navigateur et il devrait vous afficher un joli message "hello world".

El Run() est une méthode de blocage. Comme vous disposez déjà d'une application console que vous souhaitez "étendre" avec un hôte web, vous devriez probablement consulter la page Démarrer() qui déclenche l'hôte Web sans bloquer votre application console. Vous pouvez l'utiliser pour continuer à faire certaines choses, comme prendre les entrées de l'utilisateur. Vous trouverez un petit exemple de cette méthode dans cette page de doc .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X