Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 59053|Répondre: 9

[.NET Core] Combat pratique : ASP.NET Core utilise la communication gRPC

[Copié le lien]
Publié sur 11/11/2019 10:55:26 | | | |
grpc(La connexion hyperlientérée est visible.) est un framework RPC (Remote Procedure Call) open source, haute performance et à usage général, publié par Google, utilisant le protocole HTTP/2, prenant en charge le multiplexage, et utilisant ProtoBuf comme outil de sérialisation pour fournir un support multi-langues et multiplateforme.
gRPC est un cadre d’appel de procédure à distance (RPC) haute performance qui est indépendant du langage.

Les principaux avantages du gRPC sont :

  • Cadre RPC moderne, haute performance et léger.
  • Développement d’API axé sur les contrats utilisant par défaut des tampons de protocole, permettant des implémentations indépendantes du langage.
  • Des outils disponibles en plusieurs langues pour générer des serveurs et clients fortement typés.
  • Prend en charge les appels client, serveur et en streaming bidirectionnel.
  • Réduire l’utilisation du réseau avec la sérialisation binaire Protobuf.


Cet article commence par . Net Core utilise le protocole gRPC pour la communication côté client et côté serveur.

Créer un serveur gRPC

Lance Visual Studio et sélectionne Créer un nouveau projet. Sinon, sélectionnez Projet de Nouvelle > dans le menu Fichiers de Visual Studio.

Dans la boîte de dialogue Créer un nouveau projet, sélectionnez service gRPC, puis sélectionnez Suivant :




Après la création terminée, comme montré dans la figure suivante :




Créer un client gRPC

Ouvre une seconde instance de Visual Studio et sélectionne Créer un nouveau projet.
Dans la boîte de dialogue Créer un nouveau projet, sélectionnez Application console (.NET Core), puis Suivant.
Dans la boîte de texte Nom, saisissez gRPC-Client, puis sélectionnez Créer.


Ajoutez le package requis

Le projet client gRPC nécessite les packages suivants :
Grpc.Net.Client, qui contient le client .NET Core.
Google.Protobuf contient des messages Protobuf pour C#.
Grpc.Tools inclut la prise en charge des outils C# pour les fichiers Protobuf. La boîte à outils n’est pas requise à l’exécution, donc les dépendances sont marquées comme PrivateAssets="All ».




Ajouter greet.proto

Créez un dossier Protos dans votre projet client gRPC.
Copiez le fichier Protos\greet.proto du service gRPC Greeter vers le projet client gRPC.

Modifier le fichier projet gRPC-Client.csproj, ajouter le groupe d’éléments avec l’élément qui fait référence au fichier <Protobuf> greet.proto :





Créer un client Greeter

Mettez à jour le fichier Program.cs du client gRPC avec le code suivant :





Instanciez le GrpcChannel afin qu’il contienne les informations utilisées pour créer une connexion au service gRPC.
Construis un client Greeter à l’aide de GrpcChannel.
Le client Greeter utilise la méthode SayHello. Le résultat de l’appel SayHello est affiché.




Créez votre propre communication de fichier .proto

Créez un nouveau fichier userinfo.proto dans le dossier Protos du service, défini comme suit :


gRPC utilise une approche axée sur le contrat pour le développement d’API. Définissez les services et messages dans le fichier *.proto.

Modifier le fichier projet GrpcService1.csproj, ajouter le <Protobuf> groupe d’éléments avec l’élément qui fait référence au fichier userinfo.proto :

<Projet Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto » GrpcServices="Server » />
    <Protobuf Include="Protos\userinfo.proto » GrpcServices="Server » />
  </ItemGroup>

  <ItemGroup>
    <PackageReferenceInclude="Grpc.AspNetCore » Version="2.23.1 » />
  </ItemGroup>

</Project>


Créez un nouveau fichier UserInfoService.cs dans le dossier Services, le code est le suivant :

Inscrivez le service UserInfoService sur Startup.cs avec le code suivant :

En mettant de côté le client, bien sûr, vous devez copier le fichier userinfo.proto au-delà, et le code est le suivant :

Valeur de retour :

Salut tout le monde!
Réponse : Bonjour itsvse.com
{ « id » : « 1 », « name » : « architecte », « âge » : 5, « isVip » : vrai }
{ « id » : « 2 », « nom » : « itsvse.com », « âge » : 5 }
Exception non traitée. Grpc.Core.RpcException : Status(StatusCode=Annulé, Détail="Aucun message retourné de la méthode. »)
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](méthode Method'2, Chaîne hôte, options CallOptions, requête TRequest)
   à Grpc.Central.Intercepteurs.InterceptingInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   à Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TRresponderse](TRequest request, ClientInterceptorContext'2 contexte, BlockingUnaryCallContinuation'2 continuation)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](méthode Method'2, Chaîne hôte, options d’appels, requête TRequest)
   at UserInfo.UserInfoClient.GetUserInfo(requête GetUserInfoRequest, options CallOptions) dans C :\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs : ligne 62
   à UserInfo.UserInfoClient.GetUserInfo(demande GetUserInfoRequest, en-têtes de métadonnées, date limite Nullable'1, CancellationToken cancellationToken) en C : \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs :line 58
   à gRPC_Client.Program.Main(String[] args) dans C :\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs :line 20
Veuillez appuyer sur n’importe quelle touche pour continuer...


Lorsque la valeur de retour est nulle, le client lance une exception.


Fiddler, attrape le sac

Pour essayer d’utiliser Fiddler afin de capturer des paquets, configurez d’abord le proxy sur le client comme suit (en fait, vous ne pouvez pas le configurer, il suffit d’ouvrir Fiddler directement) :

Erreur côté serveur :

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 sur TLS n’était pas négocié sur un point de terminaison uniquement HTTP/2.
Erreur du client :

Exception non traitée. Grpc.Core.RpcException : Status(StatusCode=Internal, Detail="Mauvaise réponse gRPC. Protocole de réponse rétrogradé en HTTP/1.1. »)
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](méthode Method'2, Chaîne hôte, options CallOptions, requête TRequest)
   à Grpc.Central.Intercepteurs.InterceptingInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   à Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TRresponderse](TRequest request, ClientInterceptorContext'2 contexte, BlockingUnaryCallContinuation'2 continuation)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](méthode Method'2, Chaîne hôte, options d’appels, requête TRequest)
   at UserInfo.UserInfoClient.GetUserInfo(requête GetUserInfoRequest, options CallOptions) dans C :\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs : ligne 62
   à UserInfo.UserInfoClient.GetUserInfo(demande GetUserInfoRequest, en-têtes de métadonnées, date limite Nullable'1, CancellationToken cancellationToken) en C : \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs :line 58
   à gRPC_Client.Program.Main(String[] args) dans C :\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs :line 23
Veuillez appuyer sur n’importe quelle touche pour continuer...


ADRESSE POSTALE : https://localhost:5001/UserInfo/GetUserInfo

Contenu :

Host: localhost:5001
User-Agent: grpc-dotnet/2.25.0.0
TE: trailers
grpc-accept-encoding: identity,gzip
Content-Type: application/grpc
Content-Length: 7
Fiddler-Encoding: base64


Enfin, joignez le code source :

Touristes, si vous voulez voir le contenu caché de ce post, s’il vous plaîtRépondre


(Fin)




Précédent:Raffinement du programmeur : Du novice à l’ingénieur PDF complet
Prochain:100 pots sans perte
Publié sur 11/11/2019 17:46:30 |
ASP.NET Core utilise la communication gRPC
Publié sur 28/11/2019 15:14:53 |
ASP.NET Core utilise la communication gRPC
Publié sur 28/11/2019 15:15:25 |
ASP.NET Core utilise la communication gRPC
Publié sur 02/12/2020 15:52:18 |
Comment avez-vous corrigé cette dernière erreur ?
Publié sur 07/12/2020 20:37:56 |
utilisant Grpc.Core ;
utilisant Microsoft.Extensions.Logging ;
utilisant System ;
utilisant System.Collections.Generic ;
utilisant System.Linq ;
utilisant System.Threading.Tasks ;

espace de noms GrpcService1
{
    classe publique UserInfoService : UserInfo.UserInfoBase
    {
        privé<UserInfoService> ILogger _logger en lecture seule ;
        liste statique privée<UserInfoReply> userInfoRespondies = nouvelle <UserInfoReply>Liste() ;
        statique UserInfoService()
        {
            userInfoReplies.Add(nouveau UserInfoReply()
            {
                Id = 1,
                Nom = « Architecte »,
                Âge = 5,
                IsVip = vrai
            });
            userInfoReplies.Add(nouveau UserInfoReply()
            {
                Id = 2,
                Nom = « itsvse.com »,
                Âge = 5,
                IsVip = faux
            });
            userInfoReplies.Add(nouveau UserInfoReply()
            {
                Id = 3,
                Nom = « Petite racaille »,
                Âge = 1,
                IsVip = faux
            });
        }
        public UserInfoService (<UserInfoService>ILogger logger)
        {
            _logger = bûcheron ;
        }

        Priority public Task<UserInfoReply> GetUserInfo(demande GetUserInfoRequest, contexte ServerCallContext)
        {
            return Task.Run() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == requête. Id) ;
            });
        }
    }
}
Publié sur 07/12/2020 21:06:17 |
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TâcheAwaiter.HandleNonSuccessAndDebuggerNotification(Tâche Tâche)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](méthode Method'2, Chaîne hôte, options CallOptions, requête TRequest)
   à Grpc.Central.Intercepteurs.InterceptingInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   à Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TRresponderse](TRequest request, ClientInterceptorContext'2 contexte, BlockingUnaryCallContinuation'2 continuation)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](méthode Method'2, Chaîne hôte, options d’appels, requête TRequest)
Publié sur 25/05/2021 11:37:34 |
C’est vraiment bien écrit, c’est toujours loué
Publié sur 05/06/2021 11:45:21 |
ASP.NET Core utilise la communication gRPC
 Propriétaire| Publié sur 13/08/2025 15:25:35 |
Utilisez Postman pour tester (déboguer) le service gRPC
https://www.itsvse.com/thread-11053-1-1.html
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com