Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 59053|Antwort: 9

[.NET Core] Praktischer Kampf: ASP.NET Core verwendet gRPC-Kommunikation

[Link kopieren]
Veröffentlicht am 11.11.2019 10:55:26 | | | |
grpc(Der Hyperlink-Login ist sichtbar.) ist ein Open-Source-, leistungsstarkes, allzweckmäßiges RPC (Remote Procedure Call)-Framework, das von Google veröffentlicht wurde, das das HTTP/2-Protokoll verwendet, Multiplexing unterstützt und ProtoBuf als Serialisierungstool für sprachübergreifende und plattformübergreifende Unterstützung nutzt.
gRPC ist ein Hochleistungs-Remote Procedure Call (RPC)-Framework, das sprachunabhängig ist.

Die Hauptvorteile von gRPC sind:

  • Modernes, leistungsstarkes, leichtes RPC-Framework.
  • Contract-First-API-Entwicklung, die standardmäßig Protokollpuffer verwendet und sprachunabhängige Implementierungen ermöglicht.
  • Werkzeuge verfügbar in mehreren Sprachen, um stark typisierte Server und Clients zu generieren.
  • Unterstützt Client-, Server- und zweiseitige Streaming-Aufrufe.
  • Reduziere die Nutzung des Netzwerks mit Protobuf binärer Serialisierung.


Dieser Artikel beginnt mit . Net Core verwendet das gRPC-Protokoll für clientseitige und serverseitige Kommunikation.

Erstellen Sie einen gRPC-Server

Starte Visual Studio und wähle Neues Projekt erstellen. Alternativ wählen Sie im Visual Studio Dateimenü New > Project aus.

Im Dialogfeld "Neues Projekt erstellen" wählen Sie den gRPC-Dienst aus und wählen Sie dann Nächster:




Nach Abschluss der Erstellung, wie in der folgenden Abbildung gezeigt:




Erstellen Sie einen gRPC-Client

Öffne eine zweite Visual Studio-Instanz und wähle Create a new project.
Im Dialogfeld Neues Projekt erstellen wählen Sie Console App (.NET Core) und wählen Sie dann Next aus.
Im Textfeld Namen geben Sie gRPC-Client ein und wählen Sie dann Erstellen.


Fügen Sie das erforderliche Paket hinzu

Das gRPC-Client-Projekt benötigt folgende Pakete:
Grpc.Net.Client, der den .NET Core Client enthält.
Google.Protobuf enthält Protobuf-Nachrichten für C#.
Grpc.Tools bietet C#-Tool-Unterstützung für Protobuf-Dateien. Das Toolkit ist zur Laufzeit nicht erforderlich, daher werden die Abhängigkeiten als PrivateAssets="All" markiert.




Fügen Sie greet.proto hinzu

Erstelle einen Protos-Ordner in deinem gRPC-Client-Projekt.
Kopiere die Datei Protos\greet.proto vom gRPC Greeter-Dienst in das gRPC-Clientprojekt.

Bearbeiten Sie die gRPC-Client.csproj-Projektdatei, fügen Sie die Item-Gruppe mit dem Element hinzu, das auf die greet.proto-Datei verweist <Protobuf> :





Erstellen Sie einen Greeter-Client

Aktualisieren Sie die Program.cs-Datei des gRPC-Clients mit folgendem Code:





Instanziiere den GrpcChannel so, dass er die Informationen enthält, die zur Herstellung einer Verbindung zum gRPC-Dienst verwendet werden.
Baue einen Greeter-Client mit GrpcChannel.
Der Greeter-Client ruft die SayHello-Methode auf. Das Ergebnis des SayHello-Anrufs wird angezeigt.




Erstellen Sie Ihre eigene .proto-Datei-Kommunikation

Erstelle eine neue userinfo.proto-Datei unter dem Protos-Ordner des Serves, definiert wie folgt:


gRPC verwendet einen vertragsorientierten Ansatz für die API-Entwicklung. Definiert Services und Nachrichten in der *.proto-Datei.

Bearbeiten Sie die GrpcService1.csproj-Projektdatei, fügen Sie die <Protobuf> Item-Gruppe mit dem Element hinzu, das auf die userinfo.prototyp-Datei verweist:

<Project 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" Version="2.23.1" />
  </ItemGroup>

</Project>


Erstelle eine neue UserInfoService.cs-Datei unter dem Ordner Dienste, der Code ist wie folgt:

Registrieren Sie den UserInfoService-Dienst auf Startup.cs mit folgendem Code:

Abgesehen vom Client musst du natürlich die Datei userinfo.proto kopieren, und der Code ist wie folgt:

Renditewert:

Hallo Welt!
Antwort: Hallo itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Unbearbeitete Ausnahme. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Keine Nachricht von der Methode zurückgesendet.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-Methode, String-Host, CallOptions-Optionen, TRequest-Anfrage)
   bei Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   bei Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 Kontext, BlockingUnaryCallContinuation'2-Fortsetzung)
   bei Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-Methode, String-Host, CallOptions-Optionen, TRequest-Anfrage)
   bei UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-Optionen) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:Zeile 62
   bei UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, Metadaten-Header, Nullable'1 Deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:Zeile 58
   bei gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:Zeile 20
Bitte drücken Sie eine beliebige Taste, um fortzufahren...


Wenn der Rückgabewert null ist, wirft der Client eine Ausnahme.


Fiddler, nimm die Tasche

Um zu versuchen, Fiddler zum Paketfangen zu verwenden, richte zuerst den Proxy im Client wie folgt ein (tatsächlich kannst du ihn nicht einrichten, öffne Fiddler einfach direkt):

Fehler auf der Serverseite:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 über TLS wurde auf einem ausschließlich HTTP/2-basierten Endpunkt nicht ausgehandelt.
Kundenfehler:

Unbearbeitete Ausnahme. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Schlechte gRPC-Antwort. Antwortprotokoll auf HTTP/1.1 heruntergestuft.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-Methode, String-Host, CallOptions-Optionen, TRequest-Anfrage)
   bei Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   bei Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 Kontext, BlockingUnaryCallContinuation'2-Fortsetzung)
   bei Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-Methode, String-Host, CallOptions-Optionen, TRequest-Anfrage)
   bei UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-Optionen) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:Zeile 62
   bei UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, Metadaten-Header, Nullable'1 Deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:Zeile 58
   bei gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:Zeile 23
Bitte drücken Sie eine beliebige Taste, um fortzufahren...


POSTADRESSE: https://localhost:5001/UserInfo/GetUserInfo

Inhalt:

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


Zum Schluss fügen Sie den Quellcode an:

Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitteAntwort


(Ende)




Vorhergehend:Programmierer-Verfeinerung: Vom Anfänger zum Ingenieur Vollständiges PDF
Nächster:100 verlustfreie Grasmusik
Veröffentlicht am 11.11.2019 17:46:30 |
ASP.NET Core verwendet gRPC-Kommunikation
Veröffentlicht am 28.11.2019 15:14:53 |
ASP.NET Core verwendet gRPC-Kommunikation
Veröffentlicht am 28.11.2019 15:15:25 |
ASP.NET Core verwendet gRPC-Kommunikation
Veröffentlicht am 02.12.2020 15:52:18 |
Wie hast du diesen letzten Fehler gelöst?
Veröffentlicht am 07.12.2020 20:37:56 |
unter Verwendung von Grpc.Core;
unter Verwendung von Microsoft.Extensions.Logging;
mit System;
mit System.Collections.Generic;
mit System.Linq;
unter Verwendung von System.Threading.Tasks;

Namensraum GrpcService1
{
    öffentliche Klasse UserInfoService : UserInfo.UserInfoBase
    {
        privater Readonly-_logger ILogger<UserInfoService>;
        private statische Liste<UserInfoReply> userInfoReplies = neue Liste<UserInfoReply>();
        statischer UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                ID = 1,
                Name = "Architekt",
                Alter = 5,
                IsVip = wahr
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                ID = 2,
                Name = "itsvse.com",
                Alter = 5,
                IsVip = falsch
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                ID = 3,
                Name = "Kleiner Abschaum",
                Alter = 1,
                IsVip = falsch
            });
        }
        öffentlicher UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = Holzfäller;
        }

        öffentliche Überschreibung Task<UserInfoReply> GetUserInfo(GetUserInfoRequest, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == Anfrage. Id);
            });
        }
    }
}
Veröffentlicht am 07.12.2020 21:06:17 |
bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task-Aufgabe)
   bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task-Aufgabe)
   bei System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-Methode, String-Host, CallOptions-Optionen, TRequest-Anfrage)
   bei Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   bei Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 Kontext, BlockingUnaryCallContinuation'2-Fortsetzung)
   bei Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-Methode, String-Host, CallOptions-Optionen, TRequest-Anfrage)
Veröffentlicht am 25.05.2021 11:37:34 |
Es ist wirklich gut geschrieben, Lob und Lob
Veröffentlicht am 05.06.2021 11:45:21 |
ASP.NET Core verwendet gRPC-Kommunikation
 Vermieter| Veröffentlicht am 13.08.2025 15:25:35 |
Verwenden Sie Postman, um den gRPC-Dienst zu testen (zu debuggen)
https://www.itsvse.com/thread-11053-1-1.html
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com