Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 59053|Svar: 9

[.NET Core] Praktisk strid: ASP.NET Core använder gRPC-kommunikation

[Kopiera länk]
Publicerad på 2019-11-11 10:55:26 | | | |
grpc(Inloggningen med hyperlänken är synlig.) är ett öppen källkods-, högpresterande, allmänt RPC (Remote Procedure Call)-ramverk släppt av Google, med HTTP/2-protokollet, stöd för multiplexering och ProtoBuf som ett serialiseringsverktyg för att erbjuda stöd för både språk och plattform.
gRPC är ett högpresterande ramverk för fjärrproceduranrop (RPC) som är språkoberogt.

De främsta fördelarna med gRPC är:

  • Modernt, högpresterande, lättviktigt RPC-ramverk.
  • Kontraktsförst-API-utveckling som använder protokollbuffertar som standard, vilket möjliggör språkoberoende implementationer.
  • Verktyg tillgängliga i flera språk för att generera starkt typade servrar och klienter.
  • Stöder klient-, server- och tvåvägs-streamingsamtal.
  • Minska användningen av nätverket med Protobuf binär serialisering.


Den här artikeln börjar med . Net Core använder gRPC-protokollet för klient- och server-sida.

Skapa en gRPC-server

Starta Visual Studio och välj Create New Project. Alternativt kan du välja New > Project från Visual Studio File-menyn.

I dialogrutan Skapa nytt projekt, välj gRPC Service och välj sedan Nästa:




Efter att skapandet är slutfört, som visas i följande figur:




Skapa en gRPC-klient

Öppna en andra instans av Visual Studio och välj Skapa ett nytt projekt.
I dialogrutan Skapa nytt projekt, välj Console App (.NET Core) och välj sedan Nästa.
I textrutan Namn, skriv in gRPC-Client och välj sedan Skapa.


Lägg till det nödvändiga paketet

gRPC-klientprojektet kräver följande paket:
Grpc.Net.Client, som innehåller .NET Core-klienten.
Google.Protobuf innehåller Protobuf-meddelanden för C#.
Grpc.Tools inkluderar C#-verktyg för Protobuf-filer. Verktygslådan krävs inte vid körning, så beroendena markeras som PrivateAssets="Alla".




Lägg till greet.proto

Skapa en Protos-mapp i ditt gRPC-klientprojekt.
Kopiera filen Protos\greet.proto från gRPC Greeter-tjänsten till gRPC-klientprojektet.

Redigera projektfilen gRPC-Client.csproj, lägg till itemgruppen med elementet som refererar till greet.proto-filen <Protobuf> :





Skapa en Greeter-klient

Uppdatera gRPC-klientens Program.cs-fil med följande kod:





Instansiera GrpcChannel så att den innehåller informationen som används för att skapa en anslutning till gRPC-tjänsten.
Bygg en Greeter-klient med GrpcChannel.
Greeter-klienten kallar SayHello-metoden. Resultatet av SayHello-samtalet visas.




Skapa din egen .proto-filkommunikation

Skapa en ny userinfo.proto-fil under Protos-mappen i servern, definierad enligt följande:


gRPC använder en kontraktsförst-metod för API-utveckling. Definiera tjänster och meddelanden i *.proto-filen.

Redigera GrpcService1.csproj-projektfilen, lägg till <Protobuf> itemgruppen med elementet som refererar till 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>


Skapa en ny UserInfoService.cs-fil under mappen Tjänster, koden är följande:

Registrera UserInfoService-tjänsten på Startup.cs med följande kod:

Bortsett från klienten måste du förstås kopiera userinfo.proto-filen vidare, och koden är följande:

Avkastningsvärde:

Hej världen!
Svar: Hej itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Undantag för ohanterad användning. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Inget meddelande returneras från metod.")
   på Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metoden, String host, CallOptions-alternativ, TRequest-förfrågan)
   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-begäran, ClientInterceptorContext'2 kontext, BlockingUnaryCallContinuation'2 fortsättning)
   på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metod, String host, CallOptions-alternativ, TRequest-förfrågan)
   på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-alternativ) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rad 62
   på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-begäran, metadataheaders, Nullable'1 deadline, CancellationToken cancellationToken) i C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   på gRPC_Client.Program.Main(String[] args) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:rad 20
Tryck på vilken knapp som helst för att fortsätta...


När returvärdet är null kastar klienten ett undantag.


Fiddler, ta väskan

För att försöka använda Fiddler för att fånga paket, ställ först upp proxyn på klienten enligt följande (faktum är att du inte kan ställa in den, bara öppna Fiddler direkt):

Fel på serversidan:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 över TLS förhandlades inte fram på en HTTP/2-endast slutpunkt.
Kundfel:

Undantag för ohanterad användning. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Dåligt gRPC-svar. Responsprotokoll nedgraderat till HTTP/1.1.")
   på Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metoden, String host, CallOptions-alternativ, TRequest-förfrågan)
   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-begäran, ClientInterceptorContext'2 kontext, BlockingUnaryCallContinuation'2 fortsättning)
   på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metod, String host, CallOptions-alternativ, TRequest-förfrågan)
   på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-alternativ) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rad 62
   på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-begäran, metadataheaders, Nullable'1 deadline, CancellationToken cancellationToken) i C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   på gRPC_Client.Program.Main(String[] args) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:rad 23
Tryck på vilken knapp som helst för att fortsätta...


POSTADRESS: https://localhost:5001/UserInfo/GetUserInfo

Innehåll:

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


Slutligen, bifoga källkoden:

Turister, om ni vill se det dolda innehållet i detta inlägg, snällaSvar


(Slut)




Föregående:Programmerarens förfining: Från nybörjare till ingenjör Fullständig PDF
Nästa:100 förlustfri potmusik
Publicerad på 2019-11-11 17:46:30 |
ASP.NET Core använder gRPC-kommunikation
Publicerad på 2019-11-28 15:14:53 |
ASP.NET Core använder gRPC-kommunikation
Publicerad på 2019-11-28 15:15:25 |
ASP.NET Core använder gRPC-kommunikation
Publicerad på 2020-12-02 15:52:18 |
Hur löste du det här sista misstaget?
Publicerad på 2020-12-07 20:37:56 |
med Grpc.Core;
använda Microsoft.Extensions.Logging;
med System;
med System.Collections.Generic;
med System.Linq;
använda System.Threading.Tasks;

namnrymden GrpcService1
{
    publik klass UserInfoService : UserInfo.UserInfoBase
    {
        privat readonly ILogger<UserInfoService> _logger;
        privat statisk<UserInfoReply> ListanvändarInfoReplies = ny Lista<UserInfoReply>();
        statisk UserInfoService()
        {
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 1,
                Namn = "Arkitekt",
                Ålder = 5,
                IsVip = true
            });
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 2,
                Namn = "itsvse.com",
                Ålder = 5,
                IsVip = falskt
            });
            userInfoReplies.Add(ny UserInfoReply()
            {
                ID = 3,
                Namn = "Lilla avskum",
                Alder = 1,
                IsVip = falskt
            });
        }
        publik UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = skogshuggare;
        }

        publik överskrivning Uppgift<UserInfoReply> GetUserInfo(GetUserInfoRequest-förfrågan, ServerCallContext-kontext)
        {
            returnera Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == request. id);
            });
        }
    }
}
Publicerad på 2020-12-07 21:06:17 |
på System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   på System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   på System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   på System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   på Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metoden, String host, CallOptions-alternativ, TRequest-förfrågan)
   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-begäran, ClientInterceptorContext'2 kontext, BlockingUnaryCallContinuation'2 fortsättning)
   på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metod, String host, CallOptions-alternativ, TRequest-förfrågan)
Publicerad på 2021-05-25 11:37:34 |
Det är verkligen välskrivet, beröm och beröm
Publicerad på 2021-06-05 11:45:21 |
ASP.NET Core använder gRPC-kommunikation
 Hyresvärd| Publicerad på 2025-08-13 15:25:35 |
Använd Postman för att testa (felsöka) gRPC-tjänsten
https://www.itsvse.com/thread-11053-1-1.html
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com