Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 59053|Risposta: 9

[.NET Core] Combattimento pratico: ASP.NET Core utilizza la comunicazione gRPC

[Copiato link]
Pubblicato su 11/11/2019 10:55:26 | | | |
grpc(Il login del link ipertestuale è visibile.) è un framework open-source, ad alte prestazioni e generico RPC (Remote Procedure Call) rilasciato da Google, che utilizza il protocollo HTTP/2, supporta il multiplexing e utilizza ProtoBuf come strumento di serializzazione per fornire supporto sia cross-language che cross-platform.
gRPC è un framework ad alte prestazioni per chiamate di procedura remota (RPC) che è indipendente dal linguaggio.

I principali benefici del gRPC sono:

  • Framework RPC moderno, ad alte prestazioni e leggero.
  • Sviluppo API contrattuale che utilizza di default i protocol buffer, consentendo implementazioni indipendenti dal linguaggio.
  • Strumenti disponibili in più lingue per generare server e client fortemente tipizzati.
  • Supporta chiamate in streaming client, server e bidirezionale.
  • Ridurre l'uso della rete con la serializzazione binaria Protobuf.


Questo articolo inizia con . Net Core utilizza il protocollo gRPC per la comunicazione lato client e lato server.

Crea un server gRPC

Avvia Visual Studio e seleziona Crea nuovo progetto. In alternativa, seleziona Progetto Nuovo > dal menu File di Visual Studio.

Nella finestra di dialogo Crea nuovo progetto, seleziona gRPC Service, poi seleziona Next:




Dopo il completamento della creazione, come mostrato nella figura seguente:




Crea un client gRPC

Apri una seconda istanza di Visual Studio e seleziona Crea un nuovo progetto.
Nella finestra di dialogo Crea nuovo progetto, seleziona Console App (.NET Core), poi seleziona Avanti.
Nella casella di testo Nome, inserisci gRPC-Client e poi seleziona Crea.


Aggiungi il pacchetto richiesto

Il progetto client gRPC richiede i seguenti pacchetti:
Grpc.Net.Client, che contiene il client .NET Core.
Google.Protobuf contiene messaggi Protobuf per C#.
Grpc.Tools include il supporto degli strumenti C# per i file Protobuf. Il toolkit non è richiesto in runtime, quindi le dipendenze sono contrassegnate come PrivateAssets="All".




Aggiungi greet.proto

Crea una cartella Protos nel tuo progetto client gRPC.
Copia il file Protos\greet.proto dal servizio gRPC Greeter al progetto client gRPC.

Modifica il file di progetto gRPC-Client.csproj, aggiungi il gruppo di elementi con l'elemento che fa riferimento al file <Protobuf> greet.proto :





Crea un client Greeter

Aggiorna il file Program.cs del client gRPC con il seguente codice:





Istanzia il GrpcChannel in modo che contenga le informazioni utilizzate per creare una connessione al servizio gRPC.
Costruisci un client Greeter usando GrpcChannel.
Il cliente Greeter chiama il metodo SayHello. Viene visualizzato il risultato della chiamata SayHello.




Crea la tua comunicazione per file .proto

Crea un nuovo file userinfo.proto nella cartella Protos del serve, definito come segue:


gRPC utilizza un approccio contrattuale per lo sviluppo delle API. Definisci servizi e messaggi nel file *.proto.

Modifica il file del progetto GrpcService1.csproj, aggiungi il <Protobuf> gruppo di elementi con l'elemento che fa riferimento al file userinfo.proto:

<Progetto 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>
    <PackageReferenceInclude="grpc.AspNetCore" Versione="2.23.1" />
  </ItemGroup>

</Project>


Crea un nuovo file UserInfoService.cs nella cartella Services, il codice è il seguente:

Registra il servizio UserInfoService su Startup.cs con il seguente codice:

A parte il client, ovviamente devi copiare il file userinfo.proto oltre, e il codice è il seguente:

Valore di reso:

Salve, mondo!
Risposta: Ciao itsvse.com
{ "id": "1", "name": "architetto", "age": 5, "isVip": true }
{ "id": "2", "nome": "itsvse.com", "età": 5 }
Eccezione non risolta. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Nessun messaggio restituito dal metodo.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metodo Method'2, String host, opzioni CallOptions, richiesta TRequest)
   a Grpc.Core.Intercettori.IntercettazioneChiamataInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   su Grpc.Core.ClienteBase.ClienteBaseConfigurazione.ClienteBaseConfigurazioneInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContest'2 contesto, BlockingUnaryCallContinuation'2 continuazione)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodo Method'2, Host stringa, opzioni CallOptions, richiesta TRequest)
   su UserInfo.UserInfoClient.GetUserInfo(richiesta GetUserInfoRequest, opzioni CallOptions) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:riga 62
   presso UserInfo.UserInfoClient.GetUserInfo(richiesta GetUserInfoRequest, intestazioni metadati, scadenza Nullable'1, cancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   a gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Per favore, premi qualsiasi tasto per continuare...


Quando il valore di ritorno è nullo, il client lancia un'eccezione.


Fiddler, prendi la borsa

Per provare a usare Fiddler per catturare pacchetti, prima configura il proxy sul client come segue (in realtà, non puoi configurarlo, basta aprire direttamente Fiddler):

Errore lato server:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 su TLS non è stato negoziato su un endpoint solo HTTP/2.
Errore del cliente:

Eccezione non risolta. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Risposta gRPC cattiva. Protocollo di risposta declassato a HTTP/1.1.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metodo Method'2, String host, opzioni CallOptions, richiesta TRequest)
   a Grpc.Core.Intercettori.IntercettazioneChiamataInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   su Grpc.Core.ClienteBase.ClienteBaseConfigurazione.ClienteBaseConfigurazioneInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContest'2 contesto, BlockingUnaryCallContinuation'2 continuazione)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodo Method'2, Host stringa, opzioni CallOptions, richiesta TRequest)
   su UserInfo.UserInfoClient.GetUserInfo(richiesta GetUserInfoRequest, opzioni CallOptions) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:riga 62
   presso UserInfo.UserInfoClient.GetUserInfo(richiesta GetUserInfoRequest, intestazioni metadati, scadenza Nullable'1, cancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   a gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Per favore, premi qualsiasi tasto per continuare...


Indirizzo postale: https://localhost:5001/UserInfo/GetUserInfo

Contenuto:

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


Infine, allega il codice sorgente:

Turisti, se volete vedere il contenuto nascosto di questo post, vi pregoRisposta


(Fine)




Precedente:Affinamento del programmatore: da principiante a ingegnere PDF completo
Prossimo:100 musica con vaso senza perdita
Pubblicato su 11/11/2019 17:46:30 |
ASP.NET Core utilizza la comunicazione gRPC
Pubblicato su 28/11/2019 15:14:53 |
ASP.NET Core utilizza la comunicazione gRPC
Pubblicato su 28/11/2019 15:15:25 |
ASP.NET Core utilizza la comunicazione gRPC
Pubblicato su 02/12/2020 15:52:18 |
Come hai risolto quest'ultimo errore?
Pubblicato su 07/12/2020 20:37:56 |
usando Grpc.Core;
usando Microsoft.Extensions.Logging;
usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Threading.Tasks;

namespace GrpcService1
{
    classe pubblica UserInfoService : UserInfo.UserInfoBase
    {
        ILogger _logger privato in lettura<UserInfoService> sola;
        privata static<UserInfoReply> List userInfoRespondies = nuova Lista<UserInfoReply>();
        UserInfoService statico()
        {
            userInfoReplies.Aggiungi(nuovo UserInfoReply()
            {
                Id = 1,
                Nome = "Architetto",
                Età = 5,
                IsVip = true
            });
            userInfoReplies.Aggiungi(nuovo UserInfoReply()
            {
                Id = 2,
                Nome = "itsvse.com",
                Età = 5,
                IsVip = falso
            });
            userInfoReplies.Aggiungi(nuovo UserInfoReply()
            {
                Id = 3,
                Nome = "Piccola feccia",
                Età = 1,
                IsVip = falso
            });
        }
        public UserInfoService(<UserInfoService>ILogger logger)
        {
            _logger = taglialegnaio;
        }

        sovrascrittura pubblica<UserInfoReply> Compito GetUserInfo (richiesta GetUserInfoRequest, contesto ServerCallContext)
        {
            return Task.Run(() =>
            {
                return userInfoRerespondes.SingleOrDefault(x => x.Id == richiesta. Id);
            });
        }
    }
}
Pubblicato su 07/12/2020 21:06:17 |
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(task task)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metodo Method'2, String host, opzioni CallOptions, richiesta TRequest)
   a Grpc.Core.Intercettori.IntercettazioneChiamataInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   su Grpc.Core.ClienteBase.ClienteBaseConfigurazione.ClienteBaseConfigurazioneInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContest'2 contesto, BlockingUnaryCallContinuation'2 continuazione)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodo Method'2, Host stringa, opzioni CallOptions, richiesta TRequest)
Pubblicato su 25/05/2021 11:37:34 |
È scritto davvero bene, con elogii e lodi
Pubblicato su 05/06/2021 11:45:21 |
ASP.NET Core utilizza la comunicazione gRPC
 Padrone di casa| Pubblicato su 13/08/2025 15:25:35 |
Usa Postman per testare (debug) il servizio gRPC
https://www.itsvse.com/thread-11053-1-1.html
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com