IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

gRPC sur une solution existante ?


Sujet :

C#

  1. #1
    Membre expérimenté
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 457
    Par défaut gRPC sur une solution existante ?
    Bonjour j'ai un problème de taille,

    J'ai lu que Framework n'évoluerait plus après le 4.8 si j'ai bien mémorisé, et je me suis penché vers le .Net Core... j'ai lu que les serveurs WCF n'allaient plus être implémentés apparemment parce que c'était propre à Windows, donc je comptais changer pour un service gRPC en plus ça a l'air mieux.

    Mon application est éclatée en plusieurs parties selon mes besoins, une console, un service, les deux chargent un "noyau" de sorte de ne pas avoir à toujours tout réécrire.
    Ce noyau est constitué d'un Serveur WCF et d'une portion qui vérifie en permanence les modifications sur des dossiers, les deux tournent totalement indépendamment la partie WCF n'étant pas du tout vitale, si elle plante qu'il y a un conflit etc, je m'en moque car elle n'est là que pour simplifier la gestion et la configuration.

    Du coup je voulais de la même sorte intégrer un serveur gRPC et logiquement avec cette "architecture" je n'avais du coup pas besoin de réécrire grand chose.

    Mais le problème est que tout à été fait pour que sous Visual Studio tout passe par des menus, du coup créer un nouveau service gRPC sur une solution nouvelle est ultra simple, par contre l'ajouter à une solution existence je me casse les dents depuis un moment d'autant que je ne suis pas familiarisé avec aspnet.

    J'ai réussi à partir d'un service vierge et le transformer en library, pour autant du coup c'est pas vraiment intégré à mon programme.. Mais c'est tout.

    Quand je commence à vouloir créer l'host etc etc... rapidement je me heurte à un problème sur les fichiers "proto". Je ne peux en ajouter aucun depuis la liste des élements quand je fais "ajouter un nouvel element..." à mon projet. Quand je change l'extension, j'ai beau avoir tout fait proprement dans le fichier ".proto" l'application ne me génère pas la partie "classe" (une partial) , bref j'ai strictement rien comme possibilité pour faire une sorte de conversion, je le vois quand je vais sur le projet test qui part d'un service gRPC si je fais clic droit sur proto j'ai des actions dédiées, quand je le fais sur mon fichier ".proto" renommé, c'est traité comme n'importe quel autre fichier alors que je l'ai mis en compilation proto etc etc.

    Des heures que je galère, les infos sont minimalistes et ne partent pas de code à rentrer mais uniquement de manips à faire pour créer son premier serveur.

    Merci d'avance.



    edit: j'ai trouvé déjà comment créer cette partial class, en ajoutant une référence de service il va voir le fichier portant une extension proto et même si elle apparait déjà ne pas hésiter à cliquer dessus.
    Par contre toujours rien pour ajouter d'autres fichiers protos depuis la liste des fichiers même après ça il doit me manquer un menu.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    il y a peut etre un package nugget à ajouter au projet, voir dans le projet qui marche ce qu'il y a en dépendance peut etre
    sinon faire une nouvelle dll juste pour les proto avec le bon type de projet et référencé par tes projets existants
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre expérimenté
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 457
    Par défaut
    Je me demande,

    Mais n'étant pas très habitué à .Net Core...

    Dans la zone dépendance j'ai bien les mêmes packages, par contre il me manque des éléments dans frameworks et analyzers et ça je ne vois pas du tout comment les modifier.

    Merci de ta réponse en tout cas, j'ai manqué te contacter dnas l'am et je me suis dit que j'allais essayé quand même un peu tout seul ^^

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    souvent sur .netcore il faut aller modifier le fichier csproj à la main
    regarde les différences entre le projet où ca marche et l'autre tu trouveras peut etre quelque chose
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    J'ai pas tout compris, mais je suppose que tu utilises bien VS2019 qui (est le seul qui?) supporte .net core 3.

    Pour le côté server, par exemple, tu devrais avoir dans ton *.csproj quelque chose comme ça:

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ItemGroup>
        <Protobuf Include="Protos\monfichier.proto" GrpcServices="Server" />
    </ItemGroup>


    Attention, c'est peut être liée au type de projet? Parce que qd tu sors des sentiers battus, il faut savoir jongler avec les types de projets et surtout les dépendances qui sont implicites ou non. Par exemple, j'avais bien galéré à vouloir embarquer un serveur ASP.NET core dans une appli WPF, alors que .NET core 3 le permet.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 457
    Par défaut
    merci je vais regarder ça.
    Je vais dissocier car j'ai d'autres questions


    Edit:

    J'ai réussi à me faire une petite base qui pour moi me parait plus claire, je la mets là au cas où ça serve un jour à quelqu'un. Il y a deux ports différents car je voulais mixer pour voir un peu... on a un classique dans certaines applications que j'utilise souvent et que je cherche. D'un côté une appli client pour se connecter à la partie server, et de l'autre la possibilité d'utiliser une page internet pour accéder à d'autres informations. Ici j'ai tout mis sur le même serveur, enfin je pense, j'ai vraiment du mal avec .Net Core et Aspnet... Dans mon cas je serai amené à séparer vu que je veux pouvoir changer le port, redémarrer etc... pour la connexion distante pas sur qu'aspnet me convienne là dessus d'ailleurs. J'ai capté dans la foulée qu'en fait on a d'un côté le gRPC dans un aspnetcore, et de l'autre on a un autre paquet nugget avec le gRPC seul. Ici on a un log également, histoire de bien commencer... ça peut se lancer avec n'importe quoi, bien sûr il faudra disposer d'un fichier proto et d'une classe qui l’implémente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     async static Task Launch_gRPC()
            {
     
                IHostBuilder hostBuilder = new HostBuilder()
                .ConfigureWebHostDefaults(
     
                    webBuilder => webBuilder
                    //     webBuilder.UseStartup<Startup>();
     
                    //Configuration du logger
                    .ConfigureLogging(logging =>
                    {
                        logging.AddFilter("Grpc", LogLevel.Debug);
                        logging.AddConsole();
                    })
     
                    //Configuration de Kestrel
                    .ConfigureKestrel
                    (options =>
                    {
                        options.ListenLocalhost(1270);                    
     
                        options.Listen(IPAddress.Any, 5060, listenOptions =>
                        {
                            listenOptions.Protocols = HttpProtocols.Http1;
                            listenOptions.UseHttps();
     
                                // Pour fournir un certificat précis
                                /*listenOptions.UseHttps("<path to .pfx file>",
                                    "<certificate password>");*/
                        });
     
     
                    })
                    .UseStartup<Startup>()
                );
     
                try
                {
                    hostBuilder.Build().Run();
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.Message);
                }
     
            }
     
        }
    ----------------------

    Edit je mets quelques informations supplémentaires si ça ne dérange pas.

    - Dans le tutoriel de Microsoft : https://docs.microsoft.com/fr-fr/asp...=visual-studio
    Ils conseillent pour l'application client de copier coller le proto du serveur, de ce que j'ai pu tester c'est une erreur, en effet apparemment en cas de mise à jour du côté serveur ça ne suit pas du tout côté client. En revanche sous visual studio 2019 (min) en passant par "ajouter un référence de service" et en allant voir dans le dossier de l'application serveur pour récupérer le fichier proto. S'il y a un soucis dans la partie cliente du programme sur "GreeterClient", ouvrir le fichier du projet pour chercher la ligne "<Protobuf Include=" et modifier pour mettre Nomduservice="Client"
    - De la doc intéressante pour se passer du plus gros du builder: https://aspnetcore.readthedocs.io/en...s/hosting.html
    - Quelques exemples de code: https://github.com/grpc/grpc-dotnet/...aster/examples

  7. #7
    Membre expérimenté
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 457
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    J'ai pas tout compris, mais je suppose que tu utilises bien VS2019 qui (est le seul qui?) supporte .net core 3.

    Pour le côté server, par exemple, tu devrais avoir dans ton *.csproj quelque chose comme ça:

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ItemGroup>
        <Protobuf Include="Protos\monfichier.proto" GrpcServices="Server" />
    </ItemGroup>


    Attention, c'est peut être liée au type de projet? Parce que qd tu sors des sentiers battus, il faut savoir jongler avec les types de projets et surtout les dépendances qui sont implicites ou non. Par exemple, j'avais bien galéré à vouloir embarquer un serveur ASP.NET core dans une appli WPF, alors que .NET core 3 le permet.
    Je n'avais pas vu ton message tu m'en vois désolé. Je suis sous visual studio 2019, et en effet je sors justement des sentiers battus :/ . Je vais aller voir ton lien. Merci de ta réponse.


    Edit: ben bien joué !

    Ca transforme radicalement les outils à ma disposition, il fallait que je modifie le sdk. J'ai mis "Microsoft.NET.Sdk.Web" dans l'en tête Project + accès à la possibilité de créer des fichiers protos.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHPUnit] Mettre en place les tests sur une solution existante
    Par UNi[FR] dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/05/2011, 12h21
  2. Ajouter un objet à une solution existante
    Par fab039 dans le forum Visual C++
    Réponses: 1
    Dernier message: 06/03/2008, 14h01
  3. Unknown column sur une colonne existante
    Par Lenezir dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/02/2008, 13h52
  4. ajout d'un pagecontrol sur une form existante
    Par Mihalis dans le forum Delphi
    Réponses: 5
    Dernier message: 06/06/2007, 09h43
  5. Besoin d'un avis sur une solution
    Par el_quincho dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo