Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 59053|Antwoord: 9

[.NET Core] Praktische gevechten: ASP.NET Core gebruikt gRPC-communicatie

[Link kopiëren]
Geplaatst op 11-11-2019 10:55:26 | | | |
grpc(De hyperlink-login is zichtbaar.) is een open-source, hoogpresterend, algemeen RPC (Remote Procedure Call) framework uitgebracht door Google, met het HTTP/2-protocol, ondersteuning voor multiplexing en gebruikmakend van ProtoBuf als serialisatietool om ondersteuning voor talenoverstijgende en platformoverstijgende ondersteuning te bieden.
gRPC is een high-performance remote procedure call (RPC) framework dat taalonafhankelijk is.

De belangrijkste voordelen van gRPC zijn:

  • Modern, hoogpresterend, lichtgewicht RPC-framework.
  • Contract-first API-ontwikkeling die standaard protocolbuffers gebruikt, waardoor taal-agnostische implementaties mogelijk zijn.
  • Hulpmiddelen beschikbaar in meerdere talen om sterk getypeerde servers en clients te genereren.
  • Ondersteunt client-, server- en tweerichtingsgesprekken.
  • Verminder het gebruik van het netwerk met Protobuf binaire serialisatie.


Dit artikel begint met . Net Core gebruikt het gRPC-protocol voor client- en server-side communicatie.

Maak een gRPC-server aan

Start Visual Studio en selecteer Nieuw Project aanmaken. Alternatief kun je New > Project selecteren in het Visual Studio File-menu.

Selecteer in het dialoogvenster 'Nieuw Project' maken gRPC Service en selecteer vervolgens Volgende:




Nadat de creatie is voltooid, zoals weergegeven in de volgende figuur:




Maak een gRPC-client aan

Open een tweede instantie van Visual Studio en kies Create a new project.
Selecteer in het venster Nieuw Project aanmaken Console App (.NET Core) en selecteer vervolgens Volgende.
Voer in het tekstvakje 'Naam' gRPC-Client in en selecteer vervolgens 'Aanmaken'.


Voeg het benodigde pakket toe

Het gRPC-clientproject vereist de volgende pakketten:
Grpc.Net.Client, die de .NET Core-client bevat.
Google.Protobuf bevat Protobuf-berichten voor C#.
Grpc.Tools bevat ondersteuning voor C#-tools voor Protobuf-bestanden. De toolkit is niet vereist tijdens runtime, dus de afhankelijkheden worden gemarkeerd als PrivateAssets="All".




Voeg greet.proto toe

Maak een Protos-map aan in je gRPC-clientproject.
Kopieer het Protos\greet.proto-bestand van de gRPC Greeter-service naar het gRPC-clientproject.

Bewerk het gRPC-Client.csproj projectbestand, voeg de itemgroep toe met het element dat verwijst naar het greet.proto-bestand <Protobuf> :





Maak een Greeter-client aan

Werk het Program.cs-bestand van de gRPC-client bij met de volgende code:





Instansier de GrpcChannel zodat deze de informatie bevat die is gebruikt om een verbinding met de gRPC-dienst te maken.
Bouw een Greeter-client met GrpcChannel.
De Greeter-client roept de SayHello-methode aan. Het resultaat van de SayHello-oproep wordt weergegeven.




Maak je eigen .proto-bestandscommunicatie

Maak een nieuw userinfo.proto-bestand aan onder de Protos-map van de serve, gedefinieerd als volgt:


gRPC gebruikt een contract-first benadering voor API-ontwikkeling. Definieer services en berichten in het *.proto-bestand.

Bewerk het GrpcService1.csproj-projectbestand, voeg de <Protobuf> itemgroep toe met het element dat naar het userinfo.proto-bestand verwijst:

<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" versie="2.23.1" />
  </ItemGroup>

</Project>


Maak een nieuw UserInfoService.cs-bestand aan onder de Diensten-map, de code is als volgt:

Registreer de UserInfoService-dienst op Startup.cs met de volgende code:

Los van de client moet je natuurlijk het userinfo.proto-bestand kopiëren, en de code is als volgt:

Rendementswaarde:

Hallo mensen!
Reactie: Hallo itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Onbehandelde uitzondering. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Geen bericht teruggestuurd vanuit method.")
   op Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String host, CallOptions-opties, TRequest-verzoek)
   op Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   bij Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 voortzetting)
   bij Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String-host, CallOptions-opties, TRequest-verzoek)
   op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-opties) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:regel 62
   op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, metadata-headers, Nullable'1 deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:regel 58
   op gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:regel 20
Druk alstublieft op een willekeurige toets om door te gaan...


Wanneer de returnwaarde nul is, gooit de client een uitzondering.


Fiddler, pak de tas

Om Fiddler te gebruiken om pakketten te vangen, stel je eerst de proxy op de client als volgt in (je kunt hem eigenlijk niet opzetten, open Fiddler gewoon direct):

Fout aan de serverzijde:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 over TLS werd niet onderhandeld op een HTTP/2-only endpoint.
Klantfout:

Onbehandelde uitzondering. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Slechte gRPC-respons. Responsprotocol gedowngraded naar HTTP/1.1.")
   op Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String host, CallOptions-opties, TRequest-verzoek)
   op Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   bij Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 voortzetting)
   bij Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String-host, CallOptions-opties, TRequest-verzoek)
   op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-opties) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:regel 62
   op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, metadata-headers, Nullable'1 deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:regel 58
   op gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:regel 23
Druk alstublieft op een willekeurige toets om door te gaan...


POSTADRES: https://localhost:5001/UserInfo/GetUserInfo

Inhoud:

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


Voeg tenslotte de broncode bij:

Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieftAntwoord


(Einde)




Vorig:Verfijning van programmeur: Van beginner tot ingenieur volledige PDF
Volgend:100 verliesloze wietmuziek
Geplaatst op 11-11-2019 17:46:30 |
ASP.NET Core gebruikt gRPC-communicatie
Geplaatst op 28-11-2019 15:14:53 |
ASP.NET Core gebruikt gRPC-communicatie
Geplaatst op 28-11-2019 15:15:25 |
ASP.NET Core gebruikt gRPC-communicatie
Geplaatst op 02-12-2020 15:52:18 |
Hoe heb je deze laatste fout opgelost?
Geplaatst op 07-12-2020 20:37:56 |
met Grpc.Core;
gebruik van Microsoft.Extensions.Logging;
met behulp van System;
met behulp van System.Collections.Generic;
met behulp van System.Linq;
gebruik van System.Threading.Tasks;

naamruimte GrpcService1
{
    publieke klasse UserInfoService : UserInfo.UserInfoBase
    {
        privé readonly ILogger<UserInfoService> _logger;
        privé statische Lijst<UserInfoReply> userInfoReplies = nieuwe Lijst<UserInfoReply>();
        statische UserInfoService()
        {
            userInfoReplies.Add(nieuwe UserInfoReply()
            {
                ID = 1,
                Naam = "Architect",
                Leeftijd = 5,
                IsVip = waar
            });
            userInfoReplies.Add(nieuwe UserInfoReply()
            {
                ID = 2,
                Naam = "itsvse.com",
                Leeftijd = 5,
                IsVip = onwaar
            });
            userInfoReplies.Add(nieuwe UserInfoReply()
            {
                ID = 3,
                Naam = "Klein Uitschont",
                Leeftijd = 1,
                IsVip = onwaar
            });
        }
        publieke UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = houthakker;
        }

        publieke override:<UserInfoReply> Taak GetUserInfo(GetUserInfoRequest, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == verzoek. Id);
            });
        }
    }
}
Geplaatst op 07-12-2020 21:06:17 |
op System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   op System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   op System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Taaktaak)
   op System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   op Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String host, CallOptions-opties, TRequest-verzoek)
   op Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   bij Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 voortzetting)
   bij Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String-host, CallOptions-opties, TRequest-verzoek)
Geplaatst op 25-05-2021 11:37:34 |
Het is echt goed geschreven, lof en lof
Geplaatst op 05-06-2021 11:45:21 |
ASP.NET Core gebruikt gRPC-communicatie
 Huisbaas| Geplaatst op 13-08-2025 15:25:35 |
Gebruik Postman om de gRPC-service te testen (debuggen)
https://www.itsvse.com/thread-11053-1-1.html
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com