grpc(Hyperlink-login er synlig.) er et open source, højtydende, generelt RPC (Remote Procedure Call)-framework udgivet af Google, som bruger HTTP/2-protokollen, understøtter multiplexing og bruger ProtoBuf som et serialiseringsværktøj til at tilbyde understøttelse på tværs af sprog og platform. gRPC er et højtydende remote procedure call (RPC) framework, der er sprog-agnostisk.
De vigtigste fordele ved gRPC er:
- Moderne, højtydende, letvægts RPC-rammeværk.
- Kontraktbaseret API-udvikling, der som standard bruger protokolbuffere, hvilket muliggør sprog-agnostiske implementeringer.
- Værktøjer tilgængelige i flere sprog til at generere stærkt typede servere og klienter.
- Understøtter klient-, server- og tovejs-streamingopkald.
- Reducer brugen af netværket med Protobuf binær serialisering.
Denne artikel starter med . Net Core bruger gRPC-protokollen til klient- og server-side kommunikation.
Opret en gRPC-server
Start Visual Studio og vælg Opret nyt projekt. Alternativt kan du vælge New > Project fra Visual Studio File-menuen.
I dialogboksen Opret nyt projekt vælger du gRPC Service, og vælg derefter Næste:
Efter at skabelsen er fuldført, som vist i følgende figur:
Opret en gRPC-klient
Åbn en anden instans af Visual Studio og vælg Opret et nyt projekt. I dialogboksen Opret nyt projekt, vælg Console App (.NET Core), og vælg derefter Næste. I tekstboksen Navn indtast gRPC-Client og vælg derefter Create.
Tilføj den nødvendige pakke
gRPC-klientprojektet kræver følgende pakker: Grpc.Net.Client, som indeholder .NET Core-klienten. Google.Protobuf indeholder Protobuf-beskeder for C#. Grpc.Tools inkluderer C#-værktøjsunderstøttelse til Protobuf-filer. Værktøjssættet er ikke nødvendigt under kørsel, så afhængighederne markeres som PrivateAssets="Alle".
Tilføj greet.proto.
Opret en Protos-mappe i dit gRPC-klientprojekt. Kopier Protos\greet.proto-filen fra gRPC Greeter-tjenesten til gRPC-klientprojektet.
Rediger gRPC-Client.csproj-projektfilen, tilføj itemgruppen med elementet, der refererer til greet.proto-filen <Protobuf> :
Opret en Greeter-klient
Opdater gRPC-klientens Program.cs-fil med følgende kode:
Instansier GrpcChannel, så den indeholder de oplysninger, der bruges til at oprette en forbindelse til gRPC-tjenesten. Byg en Greeter-klient ved hjælp af GrpcChannel. Greeter-klienten kalder SayHello-metoden. Resultatet af SayHello-opkaldet vises.
Opret din egen .proto-filkommunikation
Opret en ny userinfo.proto-fil under Protos-mappen på serveren, defineret som følger:
gRPC anvender en kontraktbaseret tilgang til API-udvikling. Definer services og beskeder i *.proto-filen.
Rediger GrpcService1.csproj-projektfilen, tilføj <Protobuf> item-gruppen med det element, der 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" version="2.23.1" /> </ItemGroup>
</Project>
Opret en ny UserInfoService.cs-fil under Services-mappen, koden er som følger:
Registrer UserInfoService-tjenesten på Startup.cs med følgende kode:
Ser man bort fra klienten, skal man selvfølgelig kopiere userinfo.proto-filen videre, og koden er som følger:
Returværdi:
Hej verden! Svar: Hej itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Ubehandlet undtagelse. Grpc.Core.RpcException: Status(StatusCode=Annulleret, Detail="Ingen besked returneret fra metoden.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metode, String host, CallOptions-muligheder, TRequest-anmodning) 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 fortsættelse) på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2-metode, String host, CallOptions-muligheder, TRequest-anmodning) på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-muligheder) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linje 62 på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-anmodning, metadataheaders, 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 Tryk venligst på en hvilken som helst tast for at fortsætte...
Når returværdien er null, kaster klienten en undtagelse.
Fiddler, tag tasken
For at prøve at bruge Fiddler til at fange pakker, opsæt først proxyen på klienten som følger (faktisk kan du ikke sætte den op, bare åbn Fiddler direkte):
Fejl på serversiden:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 over TLS blev ikke forhandlet på et HTTP/2-only endpoint. Kundefejl:
Ubehandlet undtagelse. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Dårlig gRPC-respons. Responsprotokol nedgraderet til HTTP/1.1.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metode, String host, CallOptions-muligheder, TRequest-anmodning) 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 fortsættelse) på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2-metode, String host, CallOptions-muligheder, TRequest-anmodning) på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-muligheder) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linje 62 på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-anmodning, metadataheaders, 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 Tryk venligst på en hvilken som helst tast for at fortsætte...
POSTADRESSE: https://localhost:5001/UserInfo/GetUserInfo
Indhold:
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
Endelig vedhæft kildekoden:
Turister, hvis I vil se det skjulte indhold i dette indlæg, så vær venlig Svar
(Slut)
|