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 prego Risposta
(Fine)
|