Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 59053|Svar: 9

[.NET Core] Praktisk kamp: ASP.NET Core bruger gRPC-kommunikation

[Kopier link]
Opslået på 11/11/2019 10.55.26 | | | |
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 venligSvar


(Slut)




Tidligere:Programmørens forfinelse: Fra nybegynder til ingeniør fuld PDF
Næste:100 tabsfri pot musik
Opslået på 11/11/2019 17.46.30 |
ASP.NET Core bruger gRPC-kommunikation
Opslået på 28/11/2019 15.14.53 |
ASP.NET Core bruger gRPC-kommunikation
Opslået på 28/11/2019 15.15.25 |
ASP.NET Core bruger gRPC-kommunikation
Opslået på 02/12/2020 15.52.18 |
Hvordan løste du denne sidste fejl?
Opslået på 07/12/2020 20.37.56 |
ved brug af Grpc.Core;
brug af Microsoft.Extensions.Logging;
ved brug af System;
ved brug af System.Collections.Generic;
ved brug af System.Linq;
brug af System.Threading.Tasks;

navnerum GrpcService1
{
    offentlig klasse UserInfoService : UserInfo.UserInfoBase
    {
        privat læsebeskyttet ILogger<UserInfoService> _logger;
        privat statisk<UserInfoReply> ListebrugerInfoReplies = ny Liste<UserInfoReply>();
        statisk UserInfoService()
        {
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 1,
                Navn = "Arkitekt",
                Alder = 5,
                IsVip = sand
            });
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 2,
                Navn = "itsvse.com",
                Alder = 5,
                IsVip = falsk
            });
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 3,
                Navn = "Lille Skarn",
                Alder = 1,
                IsVip = falsk
            });
        }
        offentlig UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = skovhugger;
        }

        offentlig override Task<UserInfoReply> GetUserInfo(GetUserInfoRequest, ServerCallContext context)
        {
            returner Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == anmodning. Id);
            });
        }
    }
}
Opslået på 07/12/2020 21.06.17 |
på System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   på System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   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)
Opslået på 25/05/2021 11.37.34 |
Det er virkelig velskrevet, ros og ros
Opslået på 05/06/2021 11.45.21 |
ASP.NET Core bruger gRPC-kommunikation
 Udlejer| Opslået på 13/08/2025 15.25.35 |
Brug Postman til at teste (fejlfinde) gRPC-tjenesten
https://www.itsvse.com/thread-11053-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com