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, bitte Antwort
(Ende)
|