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ît Répondre
(Fin)
|