grpc(Prijava do hiperpovezave je vidna.) je odprtokoden, visokozmogljiv, splošni RPC (Remote Procedure Call) okvir, ki ga je izdal Google, uporablja protokol HTTP/2, podpira multipleksiranje in uporablja ProtoBuf kot orodje za serializacijo za podporo med jeziki in platformami. gRPC je visokozmogljiv okvir za oddaljene klice postopkov (RPC), ki je jezikovno neodvisen.
Glavne prednosti gRPC so:
- Sodoben, visoko zmogljiv in lahek RPC okvir.
- Razvoj API-jev, ki temeljijo na pogodbi, ki privzeto uporablja protokolne medpomnilnike, kar omogoča jezikovno neodvisne implementacije.
- Orodja, ki so na voljo v več jezikih za generiranje močno tipiziranih strežnikov in odjemalcev.
- Podpira klice odjemalca, strežnika in dvosmernega pretakanja.
- Zmanjšajte uporabo omrežja s Protobuf binarno serializacijo.
Ta članek se začne z . Net Core uporablja protokol gRPC za komunikacijo na strani odjemalca in strežnika.
Ustvarite gRPC strežnik
Zaženi Visual Studio in izberi Ustvari nov projekt. Alternativno izberi New > Project iz menija Visual Studio File.
V pogovornem oknu za ustvarjanje novega projekta izberite storitev gRPC in nato izberite Naprej:
Po zaključku ustvarjanja, kot je prikazano na naslednji sliki:
Ustvarite gRPC odjemalca
Odpri drugo instanco Visual Studia in izberi Ustvari nov projekt. V pogovornem oknu Ustvari nov projekt izberite Konzolna aplikacija (.NET Core) in nato izberite Naprej. V besedilnem polju Ime vnesite gRPC-Client in nato izberite Ustvari.
Dodajte zahtevani paket
GRPC odjemalski projekt zahteva naslednje pakete: Grpc.Net.Client, ki vsebuje .NET Core odjemalca. Google.Protobuf vsebuje Protobuf sporočila za C#. Grpc.Tools vključuje podporo za C# orodja za datoteke Protobuf. Orodjarna ni potrebna med izvajanjem, zato so odvisnosti označene kot PrivateAssets="All".
Dodaj greet.proto
Ustvarite mapo Protos v svojem gRPC odjemalskem projektu. Kopirajte datoteko Protos\greet.proto iz storitve gRPC Greeter v projekt gRPC odjemalca.
Uredite projektno datoteko gRPC-Client.csproj, dodajte skupino elementov z elementom, ki se sklicuje na datoteko greet.proto <Protobuf> :
Ustvarite odjemalca Greeter
Posodobite Program.cs datoteko gRPC odjemalca z naslednjo kodo:
Instancirajte GrpcChannel tako, da vsebuje informacije, uporabljene za vzpostavitev povezave s storitvijo gRPC. Sestavite Greeter odjemalca z uporabo GrpcChannel. Odjemalec Greeter imenuje metodo SayHello. Prikaže se rezultat klica SayHello.
Ustvarite svojo lastno .proto datoteko za komunikacijo
Ustvarite novo datoteko userinfo.proto v mapi Protos servisa, definirano takole:
gRPC uporablja pristop, ki temelji na pogodbi pri razvoju API-jev. Določite storitve in sporočila v datoteki *.proto.
Uredite projektno datoteko GrpcService1.csproj, dodajte <Protobuf> skupino elementov z elementom, ki se sklicuje na datoteko userinfo.proto:
<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" različica="2.23.1" /> </ItemGroup>
</Project>
Ustvarite novo UserInfoService.cs datoteko v mapi Storitve, koda je naslednja:
Registrirajte storitev UserInfoService na Startup.cs z naslednjo kodo:
Če odmislimo odjemalca, morate seveda kopirati datoteko userinfo.proto, koda pa je naslednja:
Donosna vrednost:
Pozdravljeni vsi skupaj! Odgovor: Pozdravljeni, itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": res } { "id": "2", "name": "itsvse.com", "starost": 5 } Neobdelana izjema. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Ni sporočila vrnjeno iz metode.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) na 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, nadaljevanje BlockingUnaryCallContinuation'2) na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linija 62 na UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) v C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Prosimo, pritisnite katerokoli tipko za nadaljevanje...
Ko je vrnjena vrednost ničelna, odjemalec vrže izjemo.
Fiddler, zgrabi torbo
Če želite poskusiti uporabiti Fiddler za zajem paketov, najprej nastavite proxy na odjemalcu takole (pravzaprav ga ne morete nastaviti, samo odprite Fiddler neposredno):
Napaka na strežniški strani:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 preko TLS ni bil dogovorjen na končni točki, ki je bila samo HTTP/2. Napaka odjemalca:
Neobdelana izjema. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Slab gRPC odziv. Protokol odziva znižan na HTTP/1.1.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) na 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, nadaljevanje BlockingUnaryCallContinuation'2) na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linija 62 na UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) v C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Prosimo, pritisnite katerokoli tipko za nadaljevanje...
POŠTNI naslov: https://localhost:5001/UserInfo/GetUserInfo
Vsebina:
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
Na koncu priložite izvorno kodo:
Turisti, če želite videti skrito vsebino te objave, prosim Odgovoriti
(Konec)
|