Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 59053|Svare: 9

[.NET Core] Praktisk kamp: ASP.NET Core bruker gRPC-kommunikasjon

[Kopier lenke]
Publisert på 11.11.2019 10:55:26 | | | |
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å snillSvare


(Slutt)




Foregående:Programmererens forfinelse: Fra nybegynner til ingeniør Full PDF
Neste:100 tapsfri hasjmusikk
Publisert på 11.11.2019 17:46:30 |
ASP.NET Core bruker gRPC-kommunikasjon
Publisert på 28.11.2019 15:14:53 |
ASP.NET Core bruker gRPC-kommunikasjon
Publisert på 28.11.2019 15:15:25 |
ASP.NET Core bruker gRPC-kommunikasjon
Publisert på 02.12.2020 15:52:18 |
Hvordan løste du denne siste feilen?
Publisert på 07.12.2020 20:37:56 |
ved bruk av Grpc.Core;
bruk av Microsoft.Extensions.Logging;
ved bruk av System;
ved bruk av System.Collections.Generic;
ved bruk av System.Linq;
bruk av System.Threading.Tasks;

navnerom GrpcService1
{
    offentlig klasse UserInfoService : UserInfo.UserInfoBase
    {
        privat readonly ILogger<UserInfoService> _logger;
        privat statisk<UserInfoReply> listebrukerInfoReplies = ny Liste<UserInfoReply>();
        statisk UserInfoService()
        {
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 1,
                Navn = "Arkitekt",
                Alder = 5,
                IsVip = sann
            });
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 2,
                Navn = "itsvse.com",
                Alder = 5,
                IsVip = falsk
            });
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 3,
                Navn = "Lille Skurk",
                Alder = 1,
                IsVip = falsk
            });
        }
        offentlig UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = tømmerhogger;
        }

        offentlig overstyring<UserInfoReply> Oppgave GetUserInfo(GetUserInfoRequest, ServerCallContext-kontekst)
        {
            returnere Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == forespørsel. Id);
            });
        }
    }
}
Publisert på 07.12.2020 21:06:17 |
på System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   på System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   på System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Oppgaveoppgave)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   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)
Publisert på 25.05.2021 11:37:34 |
Det er virkelig godt skrevet, ros og ros
Publisert på 05.06.2021 11:45:21 |
ASP.NET Core bruker gRPC-kommunikasjon
 Vert| Publisert på 13.08.2025 15:25:35 |
Bruk Postman til å teste (feilsøke) gRPC-tjenesten
https://www.itsvse.com/thread-11053-1-1.html
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com