grpc(Hüperlingi sisselogimine on nähtav.) on avatud lähtekoodiga, kõrge jõudlusega ja üldotstarbeline RPC (Remote Procedure Call) raamistik, mille on välja andnud Google, mis kasutab HTTP/2 protokolli, toetab multipleximist ning kasutab ProtoBufi serialiseerimistööriistana, et pakkuda keelteüleseid ja platvormidevahelist tuge. gRPC on kõrge jõudlusega kaugprotseduurikutse (RPC) raamistik, mis on keelesõltumatu.
GRPC peamised eelised on:
- Kaasaegne, kõrge jõudlusega ja kerge RPC raamistik.
- Lepingupõhine API arendus, mis vaikimisi kasutab protokollipuhvreid, võimaldades keelesõltumatuid rakendusi.
- Tööriistad, mis on saadaval mitmes keeles, et genereerida tugevalt tüübistatud servereid ja kliente.
- Toetab kliendi-, server- ja kahepoolseid voogedastuskõnesid.
- Vähenda võrgu kasutust Protobufi binaarse serialiseerimisega.
See artikkel algab sõnadega . Net Core kasutab kliendi- ja serveripoolseks suhtluseks gRPC protokolli.
Loo gRPC server
Käivita Visual Studio ja vali Loo uus projekt. Või vali Visual Studio failimenüüst New > Project.
Loo uue projekti dialoogiaknas valige gRPC teenus ja seejärel valige Järgmine:
Pärast loomise lõpetamist, nagu näidatud järgmises joonises:
Loo gRPC klient
Ava teine Visual Studio instants ja vali Loo uus projekt. Create New Project dialoogiaknas vali Console App (.NET Core) ja seejärel Next. Nime tekstikasti sisesta gRPC-Client ja vali seejärel Loo.
Lisa vajalik pakett
gRPC kliendiprojekt nõuab järgmisi pakette: Grpc.Net.Client, mis sisaldab .NET Core klienti. Google.Protobuf sisaldab Protobufi sõnumeid C# jaoks. Grpc.Tools sisaldab C# tööriista tuge Protobuf-failidele. Tööriistakomplekti ei nõuta käitusajal, seega on sõltuvused märgitud kui PrivateAssets="Kõik".
Lisa greet.proto
Loo oma gRPC kliendiprojektis Protos kaust. Kopeeri Protos\greet.proto fail gRPC Greeter teenusest gRPC kliendiprojekti.
Muuda gRPC-Client.csproj projektifaili, lisa elementide grupp koos elemendiga, mis viitab greet.proto <Protobuf> failile:
Loo Greeter klient
Uuenda gRPC kliendi Program.cs faili järgmise koodiga:
Instantsi GrpcChannel nii, et see sisaldab infot, mida kasutatakse ühenduse loomiseks gRPC teenusega. Ehita Greeter klient GrpcChanneli abil. Tervitaja klient kasutab SayHello meetodit. SayHello kõne tulemus kuvatakse ekraanile.
Loo oma .proto faili suhtlus
Loo uus userinfo.proto fail servi Protos kaustas, defineeritud järgmiselt:
gRPC kasutab API arenduses lepingupõhist lähenemist. Defineeri teenused ja sõnumid failis *.proto.
Muuda GrpcService1.csproj projektifaili, lisa <Protobuf> elementide grupp koos elemendiga, mis viitab userinfo.proto failile:
<Project 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" version="2.23.1" /> </ItemGroup>
</Project>
Loo uus UserInfoService.cs fail Teenuste kaustas, kood on järgmine:
Registreeri UserInfoService teenus Startup.cs järgmise koodiga:
Kliendi kõrvale jättes tuleb muidugi kopeerida userinfo.proto fail ja kood on järgmine:
Tagastusväärtus:
Tere maailm! Vastus: Tere itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Lahendamata erand. Grpc.Core.RpcException: Status(StatusCode=Tühistatud, Detail="Meetodilt sõnumit ei tagastatud.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request) aadressil Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontekst, BlockingUnaryCallContinuation'2 jätku) aadressil Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request) aadressil UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rida 62 aadressil UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) C keeles: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 aadressil gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Palun vajuta ükskõik millist klahvi, et jätkata...
Kui tagastusväärtus on null, viskab klient erandi.
Fiddler haarab koti
Fiddleriga pakettide püüdmiseks seadista esmalt kliendis proksi järgmiselt (tegelikult ei saa seda seadistada, lihtsalt ava Fiddler otse):
Viga serveri poolel:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 üle TLS-i ei olnud läbiräägitud ainult HTTP/2 lõpp-punktis. Kliendi viga:
Lahendamata erand. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Halb gRPC vastus. Vastusprotokoll on alandatud HTTP/1.1-le.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request) aadressil Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontekst, BlockingUnaryCallContinuation'2 jätku) aadressil Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request) aadressil UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rida 62 aadressil UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) C keeles: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 aadressil gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Palun vajuta ükskõik millist klahvi, et jätkata...
POSTIAADRESS: https://localhost:5001/UserInfo/GetUserInfo
Sisu:
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
Lõpuks lisa lähtekood:
Turistid, kui soovite näha selle postituse peidetud sisu, palun Vastuse
(Lõpp)
|