grpc(Hipersaito prisijungimas matomas.) yra atvirojo kodo, didelio našumo, bendrosios paskirties RPC (Remote Procedure Call) sistema, kurią išleido Google, naudojanti HTTP/2 protokolą, palaikanti multipleksavimą ir naudojanti ProtoBuf kaip serializavimo įrankį, kad būtų galima teikti kelių kalbų ir kelių platformų palaikymą. gRPC yra didelio našumo nuotolinio procedūrų iškvietimo (RPC) sistema, kuri yra nepriklausoma nuo kalbos.
Pagrindiniai gRPC privalumai:
- Moderni, didelio našumo, lengva RPC sistema.
- Sutartyje pirmasis API kūrimas, kuris pagal numatytuosius nustatymus naudoja protokolo buferius, leidžiančius diegti nepriklausomai nuo kalbos.
- Įrankiai keliomis kalbomis, skirti generuoti stipriai įvestus serverius ir klientus.
- Palaiko kliento, serverio ir dvipusius srautinius skambučius.
- Sumažinkite tinklo naudojimą naudodami "Protobuf" dvejetainį serializavimą.
Šis straipsnis prasideda . "Net Core" naudoja gRPC protokolą kliento ir serverio ryšiui.
Sukurkite gRPC serverį
Paleiskite "Visual Studio" ir pasirinkite Kurti naują projektą. Arba meniu "Visual Studio" failas pasirinkite Naujas > projektas.
Dialogo lange Kurti naują projektą pasirinkite gRPC paslauga, tada pasirinkite Pirmyn:
Baigus kūrimą, kaip parodyta šiame paveikslėlyje:
Sukurkite gRPC klientą
Atidarykite antrą "Visual Studio" egzempliorių ir pasirinkite Kurti naują projektą. Dialogo lange Kurti naują projektą pasirinkite Konsolės programa (.NET Core), tada pasirinkite Pirmyn. Teksto lauke Pavadinimas įveskite gRPC-Client, tada pasirinkite Kurti.
Pridėkite reikiamą paketą
gRPC kliento projektui reikalingi šie paketai: Grpc.Net.Client, kuriame yra .NET Core klientas. Google.Protobuf yra Protobuf pranešimai, skirti C#. Grpc.Tools apima C# įrankių palaikymą Protobuf failams. Įrankių rinkinys nereikalingas vykdymo metu, todėl priklausomybės pažymėtos kaip PrivateAssets="All".
Pridėti greet.proto
Sukurkite "Protos" aplanką savo gRPC kliento projekte. Nukopijuokite Protos\greet.proto failą iš gRPC Greeter tarnybos į gRPC kliento projektą.
Redaguokite projekto failą gRPC-Client.csproj, pridėkite elementų grupę su elementu, nurodančiu failą greet.proto <Protobuf> :
Sukurkite "Greeter" klientą
Atnaujinkite gRPC kliento Program.cs failą naudodami šį kodą:
Sukurkite GrpcChannel taip, kad jame būtų informacija, naudojama ryšiui su gRPC tarnyba sukurti. Sukurkite "Greeter" klientą naudodami "GrpcChannel". "Greeter" klientas skambina "SayHello" metodu. Rodomas "SayHello" skambučio rezultatas.
Sukurkite savo .proto failų ryšį
Sukurkite naują userinfo.proto failą aptarnavimo aplanke Protos, apibrėžtą taip:
gRPC API kūrimui naudoja sutarties metodą. Apibrėžkite paslaugas ir pranešimus *.proto faile.
Redaguokite GrpcService1.csproj projekto failą, pridėkite <Protobuf> elementų grupę su elementu, nurodančiu failą userinfo.proto:
<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>
Sukurkite naują UserInfoService.cs failą aplanke Paslaugos, kodas yra toks:
Užregistruokite "UserInfoService" paslaugą Startup.cs naudodami šį kodą:
Atmetus klientą, žinoma, turite nukopijuoti userinfo.proto failą praeityje, o kodas yra toks:
Grąžinama reikšmė:
Sveikas, pasauli! Atsakymas: Sveiki itsvse.com { "id": "1", "name": "architektas", "amžius": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Neapdorota išimtis. Grpc.Core.RpcException: Status(StatusCode=Atšaukta, Detail="Iš metodo negrąžintas joks pranešimas.") Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodas'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa) adresu Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest užklausa, ClientInterceptorContext'2 kontekstas, BlockingUnaryCallContinuation'2 tęsinys) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa) UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, CallOptions parinktys) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62 eilutė UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, Metaduomenų antraštės, Nullable'1 terminas, CancellationToken cancellationToken) C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Norėdami tęsti, paspauskite bet kurį klavišą. . . .
Kai grąžinama reikšmė yra neapibrėžta, klientas pateikia išimtį.
Smuikininkas griebk krepšį
Norėdami pabandyti naudoti "Fiddler" paketams užfiksuoti, pirmiausia nustatykite tarpinį serverį kliente taip:
Klaida serverio pusėje:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 per TLS nebuvo deramasi tik HTTP/2 galiniame taške. Kliento klaida:
Neapdorota išimtis. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Netinkamas gRPC atsakymas. Atsakymo protokolas sumažintas į HTTP/1.1.") Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodas'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa) adresu Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest užklausa, ClientInterceptorContext'2 kontekstas, BlockingUnaryCallContinuation'2 tęsinys) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa) UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, CallOptions parinktys) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62 eilutė UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, Metaduomenų antraštės, Nullable'1 terminas, CancellationToken cancellationToken) C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Norėdami tęsti, paspauskite bet kurį klavišą. . . .
PAŠTO adresas: https://localhost:5001/UserInfo/GetUserInfo
Turinys:
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
Galiausiai pridėkite šaltinio kodą:
Turistai, jei norite pamatyti paslėptą šio įrašo turinį, prašome Atsakyti
(Pabaiga)
|