grpc(Η σύνδεση με υπερσύνδεσμο είναι ορατή.) είναι ένα πλαίσιο ανοιχτού κώδικα, υψηλής απόδοσης, γενικής χρήσης RPC (Remote Procedure Call) που κυκλοφόρησε από την Google, χρησιμοποιώντας το πρωτόκολλο HTTP/2, υποστηρίζοντας πολυπλεξία και χρησιμοποιώντας το ProtoBuf ως εργαλείο σειριοποίησης για την παροχή υποστήριξης μεταξύ γλωσσών και πλατφορμών. Το gRPC είναι ένα πλαίσιο κλήσης απομακρυσμένης διαδικασίας (RPC) υψηλής απόδοσης που είναι αγνωστικό ως προς τη γλώσσα.
Τα κύρια οφέλη του gRPC είναι:
- Σύγχρονο, υψηλής απόδοσης, ελαφρύ πλαίσιο RPC.
- Ανάπτυξη API με πρώτο συμβόλαιο που χρησιμοποιεί buffer πρωτοκόλλου από προεπιλογή, επιτρέποντας υλοποιήσεις αγνωστικές ως προς τη γλώσσα.
- Εργαλεία διαθέσιμα σε πολλές γλώσσες για τη δημιουργία διακομιστών και πελατών με ισχυρή πληκτρολόγηση.
- Υποστηρίζει κλήσεις πελάτη, διακομιστή και αμφίδρομης ροής.
- Μειώστε τη χρήση του δικτύου με τη δυαδική σειριοποίηση Protobuf.
Αυτό το άρθρο ξεκινά με . Το Net Core χρησιμοποιεί το πρωτόκολλο gRPC για επικοινωνία από την πλευρά του πελάτη και του διακομιστή.
Δημιουργία διακομιστή gRPC
Εκκινήστε το Visual Studio και επιλέξτε Δημιουργία νέου έργου. Εναλλακτικά, επιλέξτε Νέο έργο > από το μενού Αρχείο του Visual Studio.
Στο παράθυρο διαλόγου Δημιουργία νέου έργου, επιλέξτε Υπηρεσία gRPC και, στη συνέχεια, επιλέξτε Επόμενο:
Αφού ολοκληρωθεί η δημιουργία, όπως φαίνεται στην παρακάτω εικόνα:
Δημιουργία προγράμματος-πελάτη gRPC
Ανοίξτε μια δεύτερη παρουσία του Visual Studio και επιλέξτε Δημιουργία νέου έργου. Στο παράθυρο διαλόγου Δημιουργία νέου έργου, επιλέξτε Εφαρμογή κονσόλας (.NET Core) και, στη συνέχεια, επιλέξτε Επόμενο. Στο πλαίσιο κειμένου Όνομα, πληκτρολογήστε gRPC-Client και, στη συνέχεια, επιλέξτε Δημιουργία.
Προσθέστε το απαιτούμενο πακέτο
Το έργο προγράμματος-πελάτη gRPC απαιτεί τα ακόλουθα πακέτα: Grpc.Net.Client, το οποίο περιέχει το πρόγραμμα-πελάτη .NET Core. Το Google.Protobuf περιέχει μηνύματα Protobuf για C#. Το Grpc.Tools περιλαμβάνει υποστήριξη εργαλείων C# για αρχεία Protobuf. Η εργαλειοθήκη δεν απαιτείται κατά το χρόνο εκτέλεσης, επομένως οι εξαρτήσεις επισημαίνονται ως PrivateAssets="All".
Προσθήκη greet.proto
Δημιουργήστε έναν φάκελο Protos στο έργο πελάτη gRPC. Αντιγράψτε το αρχείο Protos\greet.proto από την υπηρεσία gRPC Greeter στο έργο προγράμματος-πελάτη gRPC.
Επεξεργαστείτε το αρχείο έργου gRPC-Client.csproj, προσθέστε την ομάδα στοιχείων με το στοιχείο που αναφέρεται στο αρχείο greet.proto <Protobuf> :
Δημιουργήστε έναν πελάτη Greeter
Ενημερώστε το αρχείο Program.cs του προγράμματος-πελάτη gRPC με τον ακόλουθο κώδικα:
Δημιουργήστε το GrpcChannel έτσι ώστε να περιέχει τις πληροφορίες που χρησιμοποιούνται για τη δημιουργία σύνδεσης με την υπηρεσία gRPC. Κατασκευάστε έναν πελάτη Greeter χρησιμοποιώντας το GrpcChannel. Ο πελάτης Greeter καλεί τη μέθοδο SayHello. Εμφανίζεται το αποτέλεσμα της κλήσης SayHello.
Δημιουργήστε τη δική σας επικοινωνία αρχείου .proto
Δημιουργήστε ένα νέο αρχείο userinfo.proto κάτω από το φάκελο Protos του serve, το οποίο ορίζεται ως εξής:
Το gRPC χρησιμοποιεί μια προσέγγιση πρώτης σύμβασης για την ανάπτυξη API. Ορίστε υπηρεσίες και μηνύματα στο αρχείο *.proto.
Επεξεργαστείτε το αρχείο έργου GrpcService1.csproj, προσθέστε την <Protobuf> ομάδα στοιχείων με το στοιχείο που αναφέρεται στο αρχείο userinfo.proto:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup>
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Διακομιστής" /> <protobuf include="protos\userinfo.proto" grpcservices="διακομιστής" /> </ItemGroup>
<ItemGroup> <PackageReference Include="Grpc.AspNetCore" Έκδοση="2.23.1" /> </ItemGroup>
</Project>
Δημιουργήστε ένα νέο αρχείο UserInfoService.cs κάτω από το φάκελο Υπηρεσίες, ο κώδικας έχει ως εξής:
Καταχωρίστε την υπηρεσία UserInfoService στο Startup.cs με τον ακόλουθο κωδικό:
Αφήνοντας κατά μέρος τον πελάτη, φυσικά, πρέπει να αντιγράψετε το αρχείο userinfo.proto παρελθόν και ο κώδικας έχει ως εξής:
Επιστρεφόμενη τιμή:
Γεια σου κόσμε! Απάντηση: Γεια σας itsvse.com { "id": "1", "name": "αρχιτέκτονας", "age": 5, "isVip": true } { "id": "2", "όνομα": "itsvse.com", "ηλικία": 5 } Ανεπίλυτη εξαίρεση. Grpc.Core.RpcException: Κατάσταση(StatusCode=Ακυρώθηκε, Λεπτομέρεια="Δεν επιστράφηκε μήνυμα από τη μέθοδο.") στο Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](μέθοδος Method'2, String host, CallOptions options, TRequest request) στο Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 BlockingUnaryCallContinuation'2 συνέχεια) στο Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Μέθοδος '2, κεντρικός υπολογιστής συμβολοσειράς, επιλογές CallOptions, αίτημα TRequest) στο UserInfo.UserInfoClient.GetUserInfo(αίτημα GetUserInfoRequest, επιλογές CallOptions) στο C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:γραμμή 62 στο UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) στο C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 στο gRPC_Client.Program.Main(String[] args) στο C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:γραμμή 20 Πατήστε οποιοδήποτε πλήκτρο για να συνεχίσετε. . . .
Όταν η τιμή επιστροφής είναι μηδενική, ο πελάτης ρίχνει μια εξαίρεση.
Βιολιστής πιάσε την τσάντα
Για να προσπαθήσετε να χρησιμοποιήσετε το Fiddler για να καταγράψετε πακέτα, ρυθμίστε πρώτα τον διακομιστή μεσολάβησης στον πελάτη ως εξής (στην πραγματικότητα, δεν μπορείτε να τον ρυθμίσετε, απλώς ανοίξτε απευθείας το Fiddler):
Σφάλμα από την πλευρά του διακομιστή:
fail: Microsoft.AspNetCore.Server.Kestrel[0] Το HTTP/2 μέσω TLS δεν αποτέλεσε αντικείμενο διαπραγμάτευσης σε τελικό σημείο μόνο HTTP/2. Σφάλμα πελάτη:
Ανεπίλυτη εξαίρεση. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Κακή απόκριση gRPC. Το πρωτόκολλο απόκρισης υποβαθμίστηκε σε HTTP/1.1.") στο Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](μέθοδος Method'2, String host, CallOptions options, TRequest request) στο Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 BlockingUnaryCallContinuation'2 συνέχεια) στο Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Μέθοδος '2, κεντρικός υπολογιστής συμβολοσειράς, επιλογές CallOptions, αίτημα TRequest) στο UserInfo.UserInfoClient.GetUserInfo(αίτημα GetUserInfoRequest, επιλογές CallOptions) στο C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:γραμμή 62 στο UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) στο C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 στο gRPC_Client.Program.Main(String[] args) στο C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Πατήστε οποιοδήποτε πλήκτρο για να συνεχίσετε. . . .
Ταχυδρομική διεύθυνση: https://localhost:5001/UserInfo/GetUserInfo
Περιεχόμενο:
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
Τέλος, επισυνάψτε τον πηγαίο κώδικα:
Τουρίστες, αν θέλετε να δείτε το κρυφό περιεχόμενο αυτής της ανάρτησης, παρακαλώ Απάντηση
(Τέλος)
|