grpc(Innloggingen med hyperkoblingen er synlig.) er et åpen kildekode, høyytelses, generelt RPC (Remote Procedure Call)-rammeverk utgitt av Google, som bruker HTTP/2-protokollen, støtter multipleksing, og bruker ProtoBuf som et serialiseringsverktøy for å tilby støtte for tvers av språk og plattformer. gRPC er et høyytelses rammeverk for fjernprosedyrekall (RPC) som er språkuavhengig.
De viktigste fordelene med gRPC er:
- Moderne, høyytelses, lett RPC-rammeverk.
- Kontrakt-først API-utvikling som bruker protokollbuffere som standard, noe som tillater språkuavhengige implementeringer.
- Verktøy tilgjengelig i flere språk for å generere sterkt typede servere og klienter.
- Støtter klient-, server- og toveis strømmesamtaler.
- Reduser bruken av nettverket med Protobuf binær serialisering.
Denne artikkelen starter med . Net Core bruker gRPC-protokollen for klient- og server-side kommunikasjon.
Opprett en gRPC-server
Start Visual Studio og velg Lag nytt prosjekt. Alternativt kan du velge New > Project fra Visual Studio File-menyen.
I dialogboksen Lag nytt prosjekt, velg gRPC-tjeneste, og velg deretter Neste:
Etter at opprettelsen er fullført, som vist i følgende figur:
Lag en gRPC-klient
Åpne en andre instans av Visual Studio og velg Lag et nytt prosjekt. I dialogboksen Lag nytt prosjekt, velg Console App (.NET Core), og velg deretter Neste. I tekstboksen Navn, skriv inn gRPC-Client, og velg deretter Opprette.
Legg til den nødvendige pakken
gRPC-klientprosjektet krever følgende pakker: Grpc.Net.Client, som inneholder .NET Core-klienten. Google.Protobuf inneholder Protobuf-meldinger for C#. Grpc.Tools inkluderer C#-verktøystøtte for Protobuf-filer. Verktøykassen er ikke nødvendig under kjøring, så avhengighetene er merket som PrivateAssets="All".
Legg til greet.proto
Lag en Protos-mappe i ditt gRPC-klientprosjekt. Kopier Protos\greet.proto-filen fra gRPC Greeter-tjenesten til gRPC-klientprosjektet.
Rediger gRPC-Client.csproj-prosjektfilen, legg til elementgruppen med elementet som refererer til greet.proto-filen <Protobuf> :
Opprett en Greeter-klient
Oppdater gRPC-klientens Program.cs-fil med følgende kode:
Instansier GrpcChannel slik at den inneholder informasjonen som brukes til å opprette en tilkobling til gRPC-tjenesten. Bygg en Greeter-klient ved hjelp av GrpcChannel. Greeter-klienten kaller SayHello-metoden. Resultatet av SayHello-samtalen vises.
Lag din egen .proto-filkommunikasjon
Opprett en ny userinfo.proto-fil under Protos-mappen til serveren, definert som følger:
gRPC bruker en kontraktsbasert tilnærming for API-utvikling. Definer tjenester og meldinger i *.proto-filen.
Rediger GrpcService1.csproj-prosjektfilen, legg <Protobuf> til elementgruppen med elementet som refererer til userinfo.proto-filen:
<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" versjon="2.23.1" /> </ItemGroup>
</Project>
Opprett en ny UserInfoService.cs-fil under Services-mappen, koden er som følger:
Registrer UserInfoService-tjenesten på Startup.cs med følgende kode:
Bortsett fra klienten, må du selvfølgelig kopiere userinfo.proto-filen over, og koden er som følger:
Returverdi:
Hallo verden! Svar: Hei itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Unntak for ubehandlet. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Ingen melding returnert fra metoden.") på Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metode, String host, CallOptions-alternativer, TRequest-forespørsel) på Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) på Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontekst, BlockingUnaryCallContinuation'2 fortsettelse) på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2-metode, String host, CallOptions-alternativer, TRequest-forespørsel) på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-alternativer) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linje 62 på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-forespørsel, metadata-headers, Nullable'1 deadline, CancellationToken cancellationToken) i C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:linje 58 på gRPC_Client.Program.Main(String[] args) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:linje 20 Vennligst trykk på en hvilken som helst tast for å fortsette. . . .
Når returverdien er null, kaster klienten et unntak.
Fiddler, ta sekken
For å prøve å bruke Fiddler til å fange pakker, sett først opp proxyen på klienten som følger (faktisk kan du ikke sette den opp, bare åpne Fiddler direkte):
Feil på serversiden:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 over TLS ble ikke forhandlet på et HTTP/2-only endepunkt. Kundefeil:
Unntak for ubehandlet. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Dårlig gRPC-respons. Responsprotokoll nedgradert til HTTP/1.1.") på Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metode, String host, CallOptions-alternativer, TRequest-forespørsel) på Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) på Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontekst, BlockingUnaryCallContinuation'2 fortsettelse) på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2-metode, String host, CallOptions-alternativer, TRequest-forespørsel) på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-alternativer) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linje 62 på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-forespørsel, metadata-headers, Nullable'1 deadline, CancellationToken cancellationToken) i C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:linje 58 på gRPC_Client.Program.Main(String[] args) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:linje 23 Vennligst trykk på en hvilken som helst tast for å fortsette. . . .
POSTADRESSE: https://localhost:5001/UserInfo/GetUserInfo
Innhold:
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
Til slutt, legg ved kildekoden:
Turister, hvis dere vil se det skjulte innholdet i dette innlegget, vær så snill Svare
(Slutt)
|