grpc(Autentificarea cu hyperlink este vizibilă.) este un cadru open-source, de înaltă performanță, cu scop general RPC (Remote Procedure Call), lansat de Google, folosind protocolul HTTP/2, suportând multiplexarea și utilizând ProtoBuf ca instrument de serializare pentru a oferi suport cross-language și cross-platform. gRPC este un cadru de apel de procedură la distanță (RPC) de înaltă performanță, independent de limbaj.
Principalele beneficii ale gRPC sunt:
- Cadru RPC modern, de înaltă performanță, ușor.
- Dezvoltare API cu accent pe contract, care folosește implicit buffere de protocoală, permițând implementări independente de limbaj.
- Unelte disponibile în mai multe limbi pentru a genera servere și clienți puternic tipați.
- Suportă apeluri de tip client, server și streaming bidirecțional.
- Reducerea utilizării rețelei prin serializare binară Protobuf.
Acest articol începe cu . Net Core folosește protocolul gRPC pentru comunicarea pe partea clientului și pe partea serverului.
Creează un server gRPC
Lansează Visual Studio și selectează Creează proiect nou. Alternativ, selectați Proiect > Nou din meniul Fișiere Visual Studio.
În fereastra de dialog Creează proiect nou, selectează gRPC Service, apoi selectează Următorul:
După finalizarea creației, așa cum se arată în figura următoare:
Creează un client gRPC
Deschide o a doua instanță de Visual Studio și selectează Creează un proiect nou. În fereastra de dialog Creează proiect nou, selectează Aplicația Console (.NET Core), apoi selectează Următorul. În caseta de text Nume, introduceți gRPC-Client, apoi selectați Crearea.
Adaugă pachetul necesar
Proiectul client gRPC necesită următoarele pachete: Grpc.Net.Client, care conține clientul .NET Core. Google.Protobuf conține mesaje Protobuf pentru C#. Grpc.Tools include suport pentru unelte C# pentru fișierele Protobuf. Toolkit-ul nu este necesar la rulare, așa că dependențele sunt marcate ca PrivateAssets="All".
Adaugă greet.proto
Creează un folder Protos în proiectul client gRPC. Copiază fișierul Protos\greet.proto din serviciul gRPC Greeter către proiectul client gRPC.
Editează fișierul de proiect gRPC-Client.csproj, adaugă grupul de elemente cu elementul care face referire la fișierul <Protobuf> greet.proto :
Creează un client Greeter
Actualizează fișierul Program.cs al clientului gRPC cu următorul cod:
Instanțiază GrpcChannel astfel încât să conțină informațiile folosite pentru a crea o conexiune cu serviciul gRPC. Construiește un client Greeter folosind GrpcChannel. Clientul Greeter folosește metoda SayHello. Rezultatul apelului SayHello este afișat.
Creează-ți propriul fișier .proto de comunicare
Creează un nou fișier userinfo.proto sub folderul Protos al serviciului, definit astfel:
gRPC folosește o abordare bazată pe contracte pentru dezvoltarea API-urilor. Definește serviciile și mesajele în fișierul *.proto.
Editează fișierul de proiect GrpcService1.csproj, adaugă <Protobuf> grupul de elemente cu elementul care face referire la fișierul userinfo.proto:
<Proiectul 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> <PackageReference Include="Grpc.AspNetCore" Versiunea="2.23.1" /> </ItemGroup>
</Project>
Creează un nou fișier UserInfoService.cs în folderul Services, codul este următorul:
Înregistrați serviciul UserInfoService pe Startup.cs cu următorul cod:
Lăsând deoparte clientul, desigur, trebuie să copiezi fișierul userinfo.proto mai departe, iar codul este următorul:
Valoarea returnării:
Bună oameni buni! Răspuns: Salut itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Excepție nerezolvată. Grpc.Core.RpcException: Status(StatusCode=Anulat, Detaliu="Niciun mesaj returnat de la metodă.") la Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, gazdă String, opțiuni CallOptions, cerere TRequest) la Grpc.Core.Interceptori.InterceptatorApelInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest recer, ClientInterceptorContext'2 ctx) la Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](Cerere TRequest, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 continuație) la Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, String host, opțiuni CallOptions, cerere TRequest) la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, opțiuni CallOptions) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linia 62 la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, antete metadate, termenul limită Nullable'1, CancellationToken anullationToken) în C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 la gRPC_Client.Program.Main(String[] args) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Vă rugăm să apăsați orice tastă pentru a continua...
Când valoarea returnată este nulă, clientul aruncă o excepție.
Fiddler, ia geanta
Pentru a încerca să folosești Fiddler pentru a captura pachete, mai întâi configurează proxy-ul pe client după cum urmează (de fapt, nu poți să-l configurezi, doar deschide Fiddler direct):
Eroare pe partea de server:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 peste TLS nu a fost negociat pe un endpoint doar HTTP/2. Eroare client:
Excepție nerezolvată. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Răspuns greșit gRPC. Protocolul de răspuns retrogradat la HTTP/1.1.") la Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, gazdă String, opțiuni CallOptions, cerere TRequest) la Grpc.Core.Interceptori.InterceptatorApelInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest recer, ClientInterceptorContext'2 ctx) la Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](Cerere TRequest, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 continuație) la Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, String host, opțiuni CallOptions, cerere TRequest) la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, opțiuni CallOptions) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linia 62 la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, antete metadate, termenul limită Nullable'1, CancellationToken anullationToken) în C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 la gRPC_Client.Program.Main(String[] args) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Vă rugăm să apăsați orice tastă pentru a continua...
ADRESĂ POȘTALĂ: https://localhost:5001/UserInfo/GetUserInfo
Conținut:
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
În final, atașează codul sursă:
Turiști, dacă vreți să vedeți conținutul ascuns al acestei postări, vă rog Răspunde
(Sfârșit)
|