grpc(Hipersaites pieteikšanās ir redzama.) ir atvērtā koda, augstas veiktspējas, universāla RPC (Remote Procedure Call) sistēma, ko izlaidis Google, izmantojot HTTP/2 protokolu, atbalstot multipleksēšanu un izmantojot ProtoBuf kā serializācijas rīku, lai nodrošinātu starpvalodu un starpplatformu atbalstu. gRPC ir augstas veiktspējas attālās procedūras izsaukuma (RPC) sistēma, kas ir neatkarīga no valodas.
Galvenās gRPC priekšrocības ir:
- Moderns, augstas veiktspējas, viegls RPC ietvars.
- Līguma pirmā API izstrāde, kas pēc noklusējuma izmanto protokola buferus, ļaujot valodas agnostiskai ieviešanai.
- Rīki, kas pieejami vairākās valodās, lai ģenerētu stipri ierakstītus serverus un klientus.
- Atbalsta klienta, servera un divvirzienu straumēšanas zvanus.
- Samaziniet tīkla izmantošanu ar Protobuf bināro serializāciju.
Šis raksts sākas ar . Net Core izmanto gRPC protokolu klienta puses un servera puses saziņai.
gRPC servera izveide
Palaidiet Visual Studio un atlasiet Izveidot jaunu projektu. Vai arī izvēlnē Visual Studio fails atlasiet Jauns > projekts.
Dialoglodziņā Jauna projekta izveide atlasiet gRPC pakalpojums un pēc tam atlasiet Tālāk:
Pēc izveides pabeigšanas, kā parādīts šajā attēlā:
gRPC klienta izveide
Atveriet otru Visual Studio instanci un atlasiet Izveidot jaunu projektu. Dialoglodziņā Jauna projekta izveide atlasiet Konsoles programma (.NET Core) un pēc tam atlasiet Tālāk. Tekstlodziņā Nosaukums ievadiet gRPC-Client un pēc tam atlasiet Izveidot.
Pievienojiet nepieciešamo paketi
gRPC klienta projektam ir nepieciešamas šādas pakotnes: Grpc.Net.Client, kas satur .NET Core klientu. Google.Protobuf satur Protobuf ziņojumus C#. Grpc.Tools ietver C# rīku atbalstu Protobuf failiem. Rīkkopa nav nepieciešama izpildlaikā, tāpēc atkarības ir atzīmētas kā PrivateAssets = "Visi".
Pievienot greet.proto
Izveidojiet mapi Protos savā gRPC klienta projektā. Kopējiet failu Protos\greet.proto no gRPC sveiciena pakalpojuma uz gRPC klienta projektu.
Rediģējiet projekta failu gRPC-Client.csproj, pievienojiet vienumu grupu ar elementu, kas atsaucas uz failu greet.proto <Protobuf> :
Sveiciena klienta izveide
Atjauniniet gRPC klienta Program.cs failu ar šādu kodu:
Izveidojiet GrpcChannel tā, lai tajā būtu informācija, kas tiek izmantota, lai izveidotu savienojumu ar gRPC pakalpojumu. Izveidojiet Greeter klientu, izmantojot GrpcChannel. Sveicinātāja klients izsauc SayHello metodi. Tiek parādīts SayHello zvana rezultāts.
Izveidojiet savu .proto failu komunikāciju
Izveidojiet jaunu userinfo.proto failu servisa mapē Protos, kas definēts šādi:
gRPC API izstrādei izmanto līguma pieeju. Definējiet pakalpojumus un ziņojumus failā *.proto.
Rediģējiet GrpcService1.csproj projekta failu, pievienojiet <Protobuf> vienumu grupu ar elementu, kas atsaucas uz userinfo.proto failu:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup>
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Serveris" /> <Protobuf Include="Protos\userinfo.proto" GrpcServices="Serveris" /> </ItemGroup>
<ItemGroup> <PackageReference Include="Grpc.AspNetCore" version="2.23.1" /> </ItemGroup>
</Project>
Izveidojiet jaunu UserInfoService.cs failu mapē Pakalpojumi, kods ir šāds:
Reģistrējiet UserInfoService pakalpojumu Startup.cs ar šādu kodu:
Atstājot klientu, protams, jums ir jākopē userinfo.proto fails, un kods ir šāds:
Atgrieztā vērtība:
Sveika, pasaule! Atbilde: Sveiki itsvse.com { "id": "1", "name": "arhitekts", "vecums": 5, "isVip": patiess } { "id": "2", "name": "itsvse.com", "vecums": 5 } Neapstrādāts izņēmums. Grpc.Core.RpcException: Status(StatusCode=Atcelts, Detalizēta informācija="No metodes nav atgriezts ziņojums.") vietnē Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, Virknes resursdators, CallOptions opcijas, TRequest pieprasījums) vietnē Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) pie Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest pieprasījums, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 turpinājums) vietnē Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, virknes resursdators, CallOptions opcijas, TRequest pieprasījums) pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, CallOptions opcijas) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. rinda pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, Metadatu galvenes, Nullable'1 deadline, CancellationToken cancellationToken) C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 gRPC_Client.Program.Main(String[] argumenti) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Lūdzu, nospiediet jebkuru taustiņu, lai turpinātu. . . .
Ja atgrieztā vērtība ir nulle, klients rada izņēmumu.
Vijolnieks satver somu
Lai mēģinātu izmantot Fiddler, lai uztvertu paketes, vispirms iestatiet starpniekserveri klientā šādi (patiesībā jūs to nevarat iestatīt, vienkārši atveriet Fiddler tieši):
Kļūda servera pusē:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2, izmantojot TLS, netika apspriests tikai HTTP/2 galapunktā. Klienta kļūda:
Neapstrādāts izņēmums. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Slikta gRPC atbilde. Atbildes protokols pazemināts uz HTTP/1.1.") vietnē Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, Virknes resursdators, CallOptions opcijas, TRequest pieprasījums) vietnē Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) pie Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest pieprasījums, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 turpinājums) vietnē Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, virknes resursdators, CallOptions opcijas, TRequest pieprasījums) pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, CallOptions opcijas) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. rinda pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, Metadatu galvenes, Nullable'1 deadline, CancellationToken cancellationToken) C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 pie gRPC_Client.Program.Main(String[] argumenti) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Lūdzu, nospiediet jebkuru taustiņu, lai turpinātu. . . .
PASTA adrese: https://localhost:5001/UserInfo/GetUserInfo
Saturs:
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
Visbeidzot, pievienojiet avota kodu:
Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzu Atbildi
(Beigas)
|