Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 59053|Απάντηση: 9

[.NET Πυρήνας] Πρακτική μάχη: Το ASP.NET Core χρησιμοποιεί επικοινωνία gRPC

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 11/11/2019 10:55:26 π.μ. | | | |
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


Τέλος, επισυνάψτε τον πηγαίο κώδικα:

Τουρίστες, αν θέλετε να δείτε το κρυφό περιεχόμενο αυτής της ανάρτησης, παρακαλώΑπάντηση


(Τέλος)




Προηγούμενος:Βελτίωση προγραμματιστή: Από αρχάριο σε μηχανικό Πλήρες PDF
Επόμενος:100 μουσική pot χωρίς απώλειες
Δημοσιεύτηκε στις 11/11/2019 5:46:30 μ.μ. |
Το ASP.NET Core χρησιμοποιεί επικοινωνία gRPC
Δημοσιεύτηκε στις 28/11/2019 3:14:53 μ.μ. |
Το ASP.NET Core χρησιμοποιεί επικοινωνία gRPC
Δημοσιεύτηκε στις 28/11/2019 3:15:25 μ.μ. |
Το ASP.NET Core χρησιμοποιεί επικοινωνία gRPC
Δημοσιεύτηκε στις 2/12/2020 3:52:18 μ.μ. |
Πώς λύσατε αυτό το τελευταίο λάθος;
Δημοσιεύτηκε στις 7/12/2020 8:37:56 μ.μ. |
χρησιμοποιώντας το Grpc.Core.
χρησιμοποιώντας το Microsoft.Extensions.Logging.
χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Linq.
χρησιμοποιώντας το System.Threading.Tasks.

χώρος ονομάτων GrpcService1
{
    δημόσια τάξη UserInfoService : UserInfo.UserInfoBase
    {
        ιδιωτικό _logger ILogger μόνο για ανάγνωση<UserInfoService>.
        ιδιωτική στατική λίστα<UserInfoReply> userInfoReplies = new List<UserInfoReply>();
        στατικό UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 1,
                Όνομα = "Αρχιτέκτονας",
                Ηλικία = 5,
                IsVip = αληθές
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 2,
                Όνομα = "itsvse.com",
                Ηλικία = 5,
                IsVip = ψευδής
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 3,
                Όνομα = "Μικρό Απόβρασμα",
                Ηλικία = 1,
                IsVip = ψευδής
            });
        }
        public UserInfoService(<UserInfoService>ILogger logger)
        {
            _logger = καταγραφέας·
        }

        δημόσια παράκαμψη εργασίας<UserInfoReply> GetUserInfo(αίτηση GetUserInfoRequest, περιβάλλον ServerCallContext)
        {
            επιστροφή Task.Run(() =>
            {
                επιστροφή userInfoReplies.SingleOrDefault(x => x.Id == αίτημα. Id);
            });
        }
    }
}
Δημοσιεύτηκε στις 7/12/2020 9:06:17 μ.μ. |
στο System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   στο System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Εργασία εργασίας)
   στο System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Εργασία εργασίας)
   στο System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   στο 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)
Δημοσιεύτηκε στις 25/5/2021 11:37:34 π.μ. |
Είναι πραγματικά καλογραμμένο, έπαινος και έπαινος
Δημοσιεύτηκε στις 5/6/2021 11:45:21 π.μ. |
Το ASP.NET Core χρησιμοποιεί επικοινωνία gRPC
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 13/8/2025 3:25:35 μ.μ. |
Χρήση του Postman για δοκιμή (εντοπισμός σφαλμάτων) της υπηρεσίας gRPC
https://www.itsvse.com/thread-11053-1-1.html
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com