Grpc(A hiperlink bejelentkezés látható.) egy nyílt forráskódú, nagy teljesítményű, általános célú RPC (Remote Procedure Call) keretrendszer, amelyet a Google adott ki, amely az HTTP/2 protokollt használja, támogatja a multiplexelést, és a ProtoBuf-ot serializációs eszközként használja a nyelvek közötti és platformos támogatás biztosítására. a gRPC egy nagy teljesítményű távoli eljáráshívás (RPC) keretrendszer, amely nyelvtől független.
A gRPC fő előnyei a következők:
- Modern, nagy teljesítményű, könnyű RPC keretrendszer.
- Szerződéses API-fejlesztés, amely alapértelmezett protokollpuffereket használ, lehetővé téve nyelvfüggetlen megvalósításokat.
- Több nyelven elérhető eszközök erősen típusozott szerverek és kliens generálásához.
- Támogatja kliens, szerver és kétirányú streaming hívásokat.
- Csökkentse a hálózat használatát Protobuf bináris serializációval.
Ez a cikk a . A Net Core a gRPC protokollt használja kliens és szerveroldali kommunikációhoz.
Hozz létre egy gRPC szervert
Indítsd el a Visual Studio-t, és válaszd ki az Új Projekt létrehozását. Alternatívaként válaszd a Visual Studio File menüből a New > Project opciót.
Az Új Projekt létrehozása párbeszédablakban válaszd ki a gRPC szolgáltatást, majd válaszd a Következőt:
A létrehozás befejezése után, ahogy az alábbi ábrán látható:
Hozz létre gRPC klienst
Nyiss meg egy második Visual Studio példányt, és válaszd az Új projekt létrehozását. Az Új Projekt létrehozása párbeszédablakban válaszd ki a Konzol alkalmazást (.NET Core), majd válaszd a Következőt. A Név szövegmezőbe írd be a gRPC-Client menüpontot, majd válaszd a Létrehozás gombot.
Add hozzá a szükséges csomagot
A gRPC kliens projekthez a következő csomagokat kell megírni: Grpc.Net.Client, amely tartalmazza a .NET Core klienst. A Google.Protobuf Protobuf üzeneteket tartalmaz C#-hoz. A Grpc.Tools támogatja a C# eszközt Protobuf fájlokhoz. Az eszköztár futásidőben nem szükséges, ezért a függőségek PrivateAssets="All" jelzéssel vannak jelölve.
Add hozzá greet.proto
Hozz létre egy Protos mappát a gRPC kliens projektedben. Másold le a Protos\greet.proto fájlt a gRPC Greeter szolgáltatásról a gRPC kliens projektre.
Szerkesztés a gRPC-Client.csproj projektfájlt, hozzáadja az elemcsoportot azzal az elemmel, amely a greet.proto <Protobuf> fájlra hivatkozik:
Létrehozz egy Greeter klienst
Frissítse a gRPC kliens Program.cs fájlját a következő kóddal:
Indítsd be a GrpcChannel-t úgy, hogy tartalmazza azokat az információkat, amelyekkel kapcsolatot teremthetsz a gRPC szolgáltatással. Építs egy Greeter klienst GrpcChannel segítségével. A Greeter ügyfél a SayHello módszert hívja. A SayHello hívás eredménye jelenik meg.
Hozz létre saját .proto fájlkommunikációt
Hozzon létre egy új userinfo.proto fájlt a szerv Protos mappájában, amely az alábbiak szerint definiálható:
a gRPC szerződéses megközelítést alkalmaz az API fejlesztéshez. Definiáld szolgáltatásokat és üzeneteket a *.proto fájlban.
Szerkesztés a GrpcService1.csproj projektfájlt, hozzáadja az <Protobuf> elemcsoportot azzal az elemmel, amely a userinfo.proto fájlra hivatkozik:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <TargetFramework>NetcoreApp3.0</TargetFramework> </PropertyGroup>
<ItemGroup> <Protobuf include="Protos\greet.proto" GrpcServices="szerver" /> <Protobuf include="Protos\userinfo.proto" GrpcServices="szerver" /> </ItemGroup>
<ItemGroup> <PackageReference include="Grpc.AspNetCore" verzió="2.23.1" /> </ItemGroup>
</Project>
Hozz létre egy új UserInfoService.cs fájlt a Szolgáltatások mappában, a kód a következő:
Regisztrálja a UserInfoService szolgáltatást Startup.cs-n a következő kóddal:
Természetesen a klienst félretéve a userinfo.proto fájlt kell átmásolnod, és a kód a következő:
Visszaküldési érték:
Helló világ! Válasz: Sziasztok itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Kezeletlen kivétel. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Nem tért vissza üzenet a metódótól.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) a Grpc.Core.Interceptors.InterceptingCallInvoker oldalon. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontextus, BlockingUnaryCallContinuation'2 folytatás) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. sor a UserInfo.UserInfoClient.GetUserInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) címen C betűn: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Kérlek, nyomjon bármelyik billentyűt a folytatáshoz...
Ha a visszatérési érték null, az ügyfél kivételt dob.
Hegedűs, fogja meg a táskát
Ha megpróbálod a Fiddlerrel csomagokat rögzíteni, először állítsd be a proxyt a kliensen az alábbiak szerint (valójában nem lehet beállítani, csak nyisd meg közvetlenül a Fiddlert):
Hiba a szerver oldalon:
fail: Microsoft.AspNetCore.Server.Kestrel[0] A HTTP/2 a TLS-en keresztül nem volt egyeztetve egy kizárólag HTTP/2-s végponton. Ügyfélhiba:
Kezeletlen kivétel. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Rossz gRPC válasz. A válaszprotokoll HTTP/1.1-re minősítve vissza.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) a Grpc.Core.Interceptors.InterceptingCallInvoker oldalon. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontextus, BlockingUnaryCallContinuation'2 folytatás) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. sor a UserInfo.UserInfoClient.GetUserInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) címen C betűn: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Kérlek, nyomjon bármelyik billentyűt a folytatáshoz...
POSTACÍM: https://localhost:5001/UserInfo/GetUserInfo
Tartalom:
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
Végül csatoljuk a forráskódot:
Turisták, ha szeretnétek megnézni ennek a bejegyzésnek a rejtett tartalmát, kérlek Válasz
(Vége)
|