gRPC für C# (.NET): Bibliotheken und Beispiele
\n\ngRPC ist ein leistungsstarkes Framework für Remote Procedure Calls (RPC) von Google, das auf HTTP/2 und Protocol Buffers (protobuf) basiert. Im .NET-Ökosystem hat sich gRPC zum De-facto-Standard für die Kommunikation zwischen Microservices entwickelt und bietet strenge Typisierung, bidirektionales Streaming und geringe Latenz. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für die Arbeit mit gRPC in C# und geben praktische Beispiele für die Einrichtung von Server und Client.
\n\nWichtige gRPC-Bibliotheken für .NET
\n\nFür die Arbeit mit gRPC in .NET werden die folgenden NuGet-Pakete verwendet:
\n\n- \n
- Grpc.AspNetCore — Integration des gRPC-Servers in ASP.NET Core (empfohlen für das Hosting). \n
- Grpc.Net.Client — Client-Bibliothek für .NET (einschließlich .NET Core, .NET 5+). \n
- Grpc.Tools — Code-Generator aus
.proto-Dateien (wird alsProtobuf-Element in .csproj hinzugefügt). \n - Google.Protobuf — Arbeit mit protobuf-Nachrichten. \n
Alle diese Pakete werden von Microsoft unterstützt und aktiv weiterentwickelt. Die Installation erfolgt über den NuGet Package Manager oder die dotnet CLI:
\n\ndotnet add package Grpc.AspNetCore\ndotnet add package Grpc.Net.Client\ndotnet add package Google.Protobuf\ndotnet add package Grpc.Tools\n\nErstellen eines gRPC-Servers in C#
\n\nBetrachten wir die schrittweise Erstellung eines einfachen Dienstes für die Arbeit mit Bestellungen.
\n\n1. Definition der Proto-Datei
\nErstellen Sie eine Datei order.proto im Serverprojekt (z. B. GrpcServer):
syntax = "proto3";\n\nservice OrderService {\n rpc GetOrder (OrderRequest) returns (OrderResponse);\n rpc SubscribeOrders (OrderRequest) returns (stream OrderResponse);\n}\n\nmessage OrderRequest {\n int32 order_id = 1;\n}\n\nmessage OrderResponse {\n int32 order_id = 1;\n string status = 2;\n double total = 3;\n}\n\n2. Konfiguration der .csproj für die Codegenerierung
\nFügen Sie in die .csproj-Datei ein:
<ItemGroup>\n <Protobuf Include="order.proto" GrpcServices="Server" />\n</ItemGroup>\n\n3. Implementierung des Dienstes
\nErstellen Sie eine Klasse, die von der generierten Basisklasse erbt:
\n\npublic class OrderServiceImpl : OrderService.OrderServiceBase\n{\n public override Task<OrderResponse> GetOrder(OrderRequest request, ServerCallContext context)\n {\n return Task.FromResult(new OrderResponse\n {\n OrderId = request.OrderId,\n Status = "Shipped",\n Total = 99.99\n });\n }\n\n public override async Task SubscribeOrders(OrderRequest request, \n IServerStreamWriter<OrderResponse> responseStream, ServerCallContext context)\n {\n for (int i = 0; i < 5; i++)\n {\n await responseStream.WriteAsync(new OrderResponse\n {\n OrderId = request.OrderId,\n Status = $"Update #{i}",\n Total = 100 + i * 10\n });\n await Task.Delay(1000);\n }\n }\n}\n\n4. Registrierung in Program.cs
\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddGrpc();\n\nvar app = builder.Build();\napp.MapGrpcService<OrderServiceImpl>();\napp.MapGet("/", () => "gRPC server is running");\napp.Run();\n\nErstellen eines gRPC-Clients in C#
\n\nJetzt erstellen wir eine Konsolenanwendung als Client (GrpcClient).
1. Vorbereitung
\nKopieren Sie order.proto in das Client-Projekt und geben Sie in .csproj an:
<Protobuf Include="order.proto" GrpcServices="Client" />\n\n2. Client-Code
\n\nusing Grpc.Net.Client;\nusing GrpcClient;\n\nvar channel = GrpcChannel.ForAddress("https://localhost:5001");\ Auch in der Bibliothek
Objektserialisierung in TypeScript: Ein vollständiger Leitfaden
E-Mail-Versand in Java: Bibliotheken JavaMail und Simple Java Mail
Puppeteer für JavaScript (Node.js): Komplettguide mit Beispielen
JSON-Verarbeitung in Java: Die Bibliotheken Jackson und Gson für die Datenarbeit
Arbeiten mit Daten in Kotlin: Bibliotheken und Werkzeuge für die Entwicklung