Übersicht für gRPC auf .NET

Note

Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 10-Version dieses Artikels.

Warning

Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der .NET- und .NET Core-Supportrichtlinie. Die aktuelle Version finden Sie in der .NET 10-Version dieses Artikels.

Von James Newton-King

gRPC ist ein sprachunabhängiges, leistungsstarkes Remote Procedure Call (RPC, Remoteprozeduraufruf)-Framework.

Im Folgenden sind die Hauptvorteile von gRPC aufgelistet:

  • Ein modernes, hochleistungsfähiges und leichtgewichtiges Framework für Remoteprozeduraufrufe.
  • API-Entwicklung mit Vertrags-First-Ansatz, die standardmäßig Protokollpuffer verwendet, was sprachagnostische Implementierungen ermöglicht.
  • Tools, die für viele Sprachen verfügbar sind, um stark typierte Server und Clients zu generieren.
  • Unterstützt Client-, Server- und bidirektionale Streaming-Anrufe.
  • Reduzierte Netzwerkauslastung mit binärer Protobuf-Serialisierung

Diese Vorteile machen gRPC ideal für:

  • Einfache Microservices, bei denen Effizienz essentiell ist
  • Mehrsprachige Systeme, bei denen mehrere Sprachen für die Entwicklung erforderlich sind
  • Point-to-Point-Dienste, die in Echtzeit Streaminganforderungen oder -antworten verarbeiten müssen

C#-Toolunterstützung für PROTO-Dateien

gRPC verwendet einen vertragsorientierten Ansatz für die API-Entwicklung. Dienste und Nachrichten werden in PROTO-Dateien definiert:

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 .protodateien in ein Projekt eingeschlossen werden:

  • Fügen Sie einen Paketverweis auf das Grpc.Tools-Paket hinzu.
  • Fügen Sie .proto-Dateien zur <Protobuf> Elementgruppe hinzu.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Weitere Informationen zur Unterstützung von gRPC-Tools finden Sie unter gRPC-Dienste mit C#.

gRPC-Dienste in ASP.NET Core

gRPC-Dienste können in ASP.NET Core gehostet werden. Dienste verfügen über eine vollständige Integration mit ASP.NET Core-Features wie der Protokollierung, Dependency Injection (DI), der Authentifizierung und der Autorisierung.

Hinzufügen von gRPC-Diensten zu einer ASP.NET Core-App

gRPC erfordert das Paket Grpc.AspNetCore. Informationen zum Konfigurieren von gRPC in einer .NET-App finden Sie unter Konfigurieren von gRPC.

gRPC-Dienstprojektvorlage

Die Projektvorlage für gRPC-Dienste in ASP.NET Core stellt einen Startdienst bereit:

public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
    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
        });
    }
}
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 Typ GreeterBase, der aus dem Greeter-Dienst in der Datei .proto generiert wird. Der Dienst wird für Clients in der datei Program.cs zugänglich gemacht:

app.MapGrpcService<GreeterService>();

Weitere Informationen finden Sie unter gRPC-Dienste mit ASP.NET Core.

gRPC-Dienstaufrufe mit einem .NET-Client

gRPC-Clients sind konkrete Clienttypen, die aus PROTO-Dateien generiert werden. Der konkrete gRPC-Client verfügt über Methoden, die in den gRPC-Dienst in der PROTO-Datei übersetzt werden.

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

var response = await client.SayHelloAsync(
    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. Ein Kanal kann mithilfe von GrpcChannel.ForAddress.

Weitere Informationen zum Erstellen von Clients und zum Aufrufen verschiedener Dienstmethoden finden Sie unter Aufrufen von gRPC-Diensten mit dem .NET-Client.

gRPC ist ein sprachunabhängiges Hochleistungs-Framework für Remote Procedure Calls (RPC).

Im Folgenden sind die Hauptvorteile von gRPC aufgelistet:

  • Modernes, hochleistungsfähiges und leichtgewichtiges RPC-Framework (Remoteprozeduraufrufe).
  • Contract First-API-Entwicklung mit standardmäßiger Verwendung von Protokollpuffern, wodurch sprachunabhängige Implementierungen möglich sind
  • Tools, die für viele Sprachen verfügbar sind, um stark typierte Server und Clients zu generieren.
  • Unterstützt Client-, Server- und bidirektionale Streaming-Anrufe.
  • Reduzierte Netzwerkauslastung mit binärer Protobuf-Serialisierung

Diese Vorteile machen gRPC ideal für:

  • Einfache Microservices, bei denen Effizienz essentiell ist
  • Mehrsprachige Systeme, bei denen mehrere Sprachen für die Entwicklung erforderlich sind
  • Point-to-Point-Dienste, die in Echtzeit Streaminganforderungen oder -antworten verarbeiten müssen

C#-Toolunterstützung für .proto-Dateien

gRPC verwendet einen vertragsorientierten Ansatz für die API-Entwicklung. Dienste und Nachrichten werden in .proto-Dateien definiert:

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 aufgenommen werden:

  • Fügen Sie dem Grpc.Tools-Paket einen Paketverweis hinzu.
  • Fügen Sie .proto-Dateien der Elementgruppe <Protobuf> hinzu.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Weitere Informationen zur gRPC-Toolunterstützung finden Sie unter gRPC Services with C#.

gRPC-Dienste in ASP.NET Core

gRPC-Dienste können in ASP.NET Core gehostet werden. Dienste verfügen über eine vollständige Integration mit ASP.NET Core-Features wie der Protokollierung, Dependency Injection (DI), der Authentifizierung und der Autorisierung.

Hinzufügen von gRPC-Diensten zu einer ASP.NET Core-App

gRPC erfordert das Paket Grpc.AspNetCore. Informationen zum Konfigurieren von gRPC in einer .NET-App finden Sie unter Konfigurieren von gRPC.

gRPC-Dienstprojektvorlage

Die Projektvorlage für gRPC-Dienste stellt einen Startdienst bereit:

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 Typ GreeterBase, der aus dem Greeter-Dienst in der .proto-Datei generiert wird. Der Dienst wird für Clients in Startup.cs verfügbar gemacht:

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

Weitere Informationen zu gRPC-Diensten in ASP.NET Core finden Sie unter gRPC-Dienste mit ASP.NET Core.

Aufrufen von gRPC-Diensten mithilfe eines .NET-Clients

gRPC-Clients sind konkrete Clienttypen, die aus .proto-Dateien generiert werden. Der konkrete gRPC-Client verfügt über Methoden, die in den gRPC-Dienst in der .proto-Datei übersetzt werden.

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

var response = await client.SayHelloAsync(
    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. Ein Kanal kann mithilfe von GrpcChannel.ForAddress erstellt werden.

Weitere Informationen zum Erstellen von Clients und zum Aufrufen verschiedener Dienstmethoden finden Sie unter Aufrufen von gRPC-Diensten mit dem .NET-Client.