Einführung in gRPC in .NET CoreIntroduction to gRPC on .NET Core

Von John Luo und James Newton-KingBy John Luo and James Newton-King

gRPC ist ein sprachunabhängiges RPC-Framework mit hoher Leistung (Remote Procedure Call, Remoteprozeduraufruf).gRPC is a language agnostic, high-performance Remote Procedure Call (RPC) framework.

Im Folgenden sind die Hauptvorteile von gRPC aufgelistet:The main benefits of gRPC are:

  • Ein modernes, hochleistungsfähiges und reduziertes Framework für RemoteprozeduraufrufeModern, high-performance, lightweight RPC framework.
  • Contract First-API-Entwicklung mit standardmäßiger Verwendung von Protokollpuffern, wodurch sprachunabhängige Implementierungen möglich sindContract-first API development, using Protocol Buffers by default, allowing for language agnostic implementations.
  • Für viele Sprachen verfügbare Tools zur Generierung stark typisierter Server und ClientsTooling available for many languages to generate strongly-typed servers and clients.
  • Unterstützung von Clients, Servern und bidirektionalen StreamingaufrufenSupports client, server, and bi-directional streaming calls.
  • Reduzierte Netzwerkauslastung mit binärer Protobuf-SerialisierungReduced network usage with Protobuf binary serialization.

gRPC ist für die folgenden Komponenten besonders geeignet:These benefits make gRPC ideal for:

  • Einfache Microservices, bei denen Effizienz essentiell istLightweight microservices where efficiency is critical.
  • Mehrsprachige Systeme, bei denen mehrere Sprachen für die Entwicklung erforderlich sindPolyglot systems where multiple languages are required for development.
  • Point-to-Point-Dienste, die in Echtzeit Streaminganforderungen oder -antworten verarbeiten müssenPoint-to-point real-time services that need to handle streaming requests or responses.

C#-Toolunterstützung für PROTO-DateienC# Tooling support for .proto files

gRPC verwendet einen Vertrag zuerst-Ansatz für die API-Entwicklung.gRPC uses a contract-first approach to API development. Dienste und Nachrichten werden in *.proto-Dateien definiert:Services and messages are defined in *.proto files:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

.NET-Typen für Dienste, Clients und Nachrichten werden automatisch generiert, indem *.proto-Dateien in ein Projekt eingeschlossen werden:.NET types for services, clients and messages are automatically generated by including *.proto files in a project:

  • Fügen Sie dem Grpc.Tools-Paket einen Paketverweis hinzu.Add a package reference to Grpc.Tools package.
  • Fügen Sie der <Protobuf>-Elementgruppe *.proto-Dateien hinzu.Add *.proto files to the <Protobuf> item group.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Weitere Informationen zur Unterstützung von gRPC-Tools finden Sie unter gRPC-Dienste mit C#.For more information on gRPC tooling support, see gRPC-Dienste mit C#.

gRPC-Dienste in ASP.NET CoregRPC services on ASP.NET Core

gRPC-Dienste können in ASP.NET Core gehostet werden.gRPC services can be hosted on ASP.NET Core. Dienste sind vollständig in häufig verwendete ASP.NET Core-Features wie Protokollierung, Abhängigkeitsinjektion (DI), Authentifizierung und Autorisierung integriert.Services have full integration with popular ASP.NET Core features such as logging, dependency injection (DI), authentication and authorization.

Die Projektvorlage für gRPC-Dienste stellt einen Startdienst bereit:The gRPC service project template provides a starter service:

public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;

    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }

    public override Task<HelloReply> SayHello(HelloRequest request,
        ServerCallContext context)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);
        return Task.FromResult(new HelloReply 
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService erbt vom GreeterBase-Typ, der aus dem Greeter-Dienst in der *.proto-Datei generiert wird.GreeterService inherits from the GreeterBase type, which is generated from the Greeter service in the *.proto file. Der Dienst wird für Clients in Startup.cs verfügbar gemacht:The service is made accessible to clients in Startup.cs:

app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

Weitere Informationen zu gRPC-Diensten in ASP.NET Core finden Sie unter gRPC-Dienste mit ASP.NET Core.To learn more about gRPC services on ASP.NET Core, see gRPC-Dienste mit ASP.NET Core.

Aufrufen von gRPC-Diensten mithilfe eines .NET-ClientsCall gRPC services with a .NET client

gRPC-Clients sind konkrete Clienttypen, die aus *.protoDateien generiert werden.gRPC clients are concrete client types that are generated from *.proto files. Der konkrete gRPC-Client verfügt über Methoden, die in den gRPC-Dienst in der *.proto-Datei übersetzt werden.The concrete gRPC client has methods that translate to the gRPC service in the *.proto file.

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHello(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

Ein gRPC-Client wird mithilfe eines Kanals erstellt, der eine langlebige Verbindung mit einem gRPC-Dienst darstellt.A gRPC client is created using a channel, which represents a long-lived connection to a gRPC service. Ein Kanal kann mithilfe von GrpcChannel.ForAddress erstellt werden.A channel can be created using GrpcChannel.ForAddress.

Weitere Informationen zum Erstellen von Clients und zum Aufrufen verschiedener Dienstmethoden finden Sie unter GrpC-Dienste mit dem .NET-Client abrufen.For more information on creating clients, and calling different service methods, see GrpC-Dienste mit dem .NET-Client abrufen.

gRPC wird in Azure App Service nicht unterstütztgRPC not supported on Azure App Service

Warnung

ASP.NET Core gRPC wird derzeit nicht in Azure App Service oder IIS unterstützt.ASP.NET Core gRPC is not currently supported on Azure App Service or IIS. Die HTTP/2-Implementierung von „Http.Sys“ unterstützt keine nachstehenden HTTP-Antwortheader, auf die gRPC sich stützt.The HTTP/2 implementation of Http.Sys does not support HTTP response trailing headers which gRPC relies on. Weitere Informationen finden Sie in diesem GitHub-Issue.For more information, see this GitHub issue.

Zusätzliche RessourcenAdditional resources