Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 59053|Răspunde: 9

[.NET Core] Luptă practică: ASP.NET Core folosește comunicare gRPC

[Copiază linkul]
Postat pe 11.11.2019 10:55:26 | | | |
grpc(Autentificarea cu hyperlink este vizibilă.) este un cadru open-source, de înaltă performanță, cu scop general RPC (Remote Procedure Call), lansat de Google, folosind protocolul HTTP/2, suportând multiplexarea și utilizând ProtoBuf ca instrument de serializare pentru a oferi suport cross-language și cross-platform.
gRPC este un cadru de apel de procedură la distanță (RPC) de înaltă performanță, independent de limbaj.

Principalele beneficii ale gRPC sunt:

  • Cadru RPC modern, de înaltă performanță, ușor.
  • Dezvoltare API cu accent pe contract, care folosește implicit buffere de protocoală, permițând implementări independente de limbaj.
  • Unelte disponibile în mai multe limbi pentru a genera servere și clienți puternic tipați.
  • Suportă apeluri de tip client, server și streaming bidirecțional.
  • Reducerea utilizării rețelei prin serializare binară Protobuf.


Acest articol începe cu . Net Core folosește protocolul gRPC pentru comunicarea pe partea clientului și pe partea serverului.

Creează un server gRPC

Lansează Visual Studio și selectează Creează proiect nou. Alternativ, selectați Proiect > Nou din meniul Fișiere Visual Studio.

În fereastra de dialog Creează proiect nou, selectează gRPC Service, apoi selectează Următorul:




După finalizarea creației, așa cum se arată în figura următoare:




Creează un client gRPC

Deschide o a doua instanță de Visual Studio și selectează Creează un proiect nou.
În fereastra de dialog Creează proiect nou, selectează Aplicația Console (.NET Core), apoi selectează Următorul.
În caseta de text Nume, introduceți gRPC-Client, apoi selectați Crearea.


Adaugă pachetul necesar

Proiectul client gRPC necesită următoarele pachete:
Grpc.Net.Client, care conține clientul .NET Core.
Google.Protobuf conține mesaje Protobuf pentru C#.
Grpc.Tools include suport pentru unelte C# pentru fișierele Protobuf. Toolkit-ul nu este necesar la rulare, așa că dependențele sunt marcate ca PrivateAssets="All".




Adaugă greet.proto

Creează un folder Protos în proiectul client gRPC.
Copiază fișierul Protos\greet.proto din serviciul gRPC Greeter către proiectul client gRPC.

Editează fișierul de proiect gRPC-Client.csproj, adaugă grupul de elemente cu elementul care face referire la fișierul <Protobuf> greet.proto :





Creează un client Greeter

Actualizează fișierul Program.cs al clientului gRPC cu următorul cod:





Instanțiază GrpcChannel astfel încât să conțină informațiile folosite pentru a crea o conexiune cu serviciul gRPC.
Construiește un client Greeter folosind GrpcChannel.
Clientul Greeter folosește metoda SayHello. Rezultatul apelului SayHello este afișat.




Creează-ți propriul fișier .proto de comunicare

Creează un nou fișier userinfo.proto sub folderul Protos al serviciului, definit astfel:


gRPC folosește o abordare bazată pe contracte pentru dezvoltarea API-urilor. Definește serviciile și mesajele în fișierul *.proto.

Editează fișierul de proiect GrpcService1.csproj, adaugă <Protobuf> grupul de elemente cu elementul care face referire la fișierul userinfo.proto:

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

</Project>


Creează un nou fișier UserInfoService.cs în folderul Services, codul este următorul:

Înregistrați serviciul UserInfoService pe Startup.cs cu următorul cod:

Lăsând deoparte clientul, desigur, trebuie să copiezi fișierul userinfo.proto mai departe, iar codul este următorul:

Valoarea returnării:

Bună oameni buni!
Răspuns: Salut itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Excepție nerezolvată. Grpc.Core.RpcException: Status(StatusCode=Anulat, Detaliu="Niciun mesaj returnat de la metodă.")
   la Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, gazdă String, opțiuni CallOptions, cerere TRequest)
   la Grpc.Core.Interceptori.InterceptatorApelInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest recer, ClientInterceptorContext'2 ctx)
   la Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](Cerere TRequest, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 continuație)
   la Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, String host, opțiuni CallOptions, cerere TRequest)
   la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, opțiuni CallOptions) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linia 62
   la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, antete metadate, termenul limită Nullable'1, CancellationToken anullationToken) în C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   la gRPC_Client.Program.Main(String[] args) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Vă rugăm să apăsați orice tastă pentru a continua...


Când valoarea returnată este nulă, clientul aruncă o excepție.


Fiddler, ia geanta

Pentru a încerca să folosești Fiddler pentru a captura pachete, mai întâi configurează proxy-ul pe client după cum urmează (de fapt, nu poți să-l configurezi, doar deschide Fiddler direct):

Eroare pe partea de server:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 peste TLS nu a fost negociat pe un endpoint doar HTTP/2.
Eroare client:

Excepție nerezolvată. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Răspuns greșit gRPC. Protocolul de răspuns retrogradat la HTTP/1.1.")
   la Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, gazdă String, opțiuni CallOptions, cerere TRequest)
   la Grpc.Core.Interceptori.InterceptatorApelInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest recer, ClientInterceptorContext'2 ctx)
   la Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](Cerere TRequest, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 continuație)
   la Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, String host, opțiuni CallOptions, cerere TRequest)
   la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, opțiuni CallOptions) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linia 62
   la UserInfo.UserInfoClient.GetUserInfo(cerere GetUserInfoRequest, antete metadate, termenul limită Nullable'1, CancellationToken anullationToken) în C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   la gRPC_Client.Program.Main(String[] args) în C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Vă rugăm să apăsați orice tastă pentru a continua...


ADRESĂ POȘTALĂ: https://localhost:5001/UserInfo/GetUserInfo

Conținut:

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


În final, atașează codul sursă:

Turiști, dacă vreți să vedeți conținutul ascuns al acestei postări, vă rogRăspunde


(Sfârșit)




Precedent:Rafinamentul programatorului: De la începător la inginer PDF complet
Următor:100 de muzică pot fără pierderi
Postat pe 11.11.2019 17:46:30 |
ASP.NET Core folosește comunicare gRPC
Postat pe 28.11.2019 15:14:53 |
ASP.NET Core folosește comunicare gRPC
Postat pe 28.11.2019 15:15:25 |
ASP.NET Core folosește comunicare gRPC
Postat pe 02.12.2020 15:52:18 |
Cum ai rezolvat această ultimă greșeală?
Postat pe 07.12.2020 20:37:56 |
folosind Grpc.Core;
folosind Microsoft.Extensions.Logging;
folosind Sistem;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Threading.Tasks;

spațiu de nume GrpcService1
{
    clasa publică UserInfoService : UserInfo.UserInfoBase
    {
        <UserInfoService> ILogger _logger privat;
        private static<UserInfoReply> List userInfoResponds = new List<UserInfoReply>();
        static UserInfoService()
        {
            userInfoReplies.Add(noul UserInfoReply()
            {
                Id = 1,
                Nume = "Arhitect",
                Vârstă = 5,
                IsVip = adevărat
            });
            userInfoReplies.Add(noul UserInfoReply()
            {
                Id = 2,
                Nume = "itsvse.com",
                Vârstă = 5,
                IsVip = false
            });
            userInfoReplies.Add(noul UserInfoReply()
            {
                Id = 3,
                Nume = "Mizerie mică",
                Vârstă = 1,
                IsVip = false
            });
        }
        public UserInfoService(<UserInfoService>ILogger logger)
        {
            _logger = tăietor;
        }

        suprascriere publică Task<UserInfoReply> GetUserInfo(cerere GetUserInfoRequest, context ServerCallContext)
        {
            return Task.Run(() =>
            {
                returnează userInfoReplies.SingleOrDefault(x => x.Id == solicitare. Id);
            });
        }
    }
}
Postat pe 07.12.2020 21:06:17 |
la System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Sarcina sarcinii)
   la System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Sarcina sarcinii)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   la Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, gazdă String, opțiuni CallOptions, cerere TRequest)
   la Grpc.Core.Interceptori.InterceptatorApelInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest recer, ClientInterceptorContext'2 ctx)
   la Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](Cerere TRequest, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 continuație)
   la Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, String host, opțiuni CallOptions, cerere TRequest)
Postat pe 25.05.2021 11:37:34 |
Este foarte bine scris, laude și laude
Postat pe 05.06.2021 11:45:21 |
ASP.NET Core folosește comunicare gRPC
 Proprietarul| Postat pe 13.08.2025 15:25:35 |
Folosiți Postman pentru a testa (depana) serviciul gRPC
https://www.itsvse.com/thread-11053-1-1.html
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com