Delen via


Overzicht voor gRPC op .NET

Note

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.

Warning

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.

Important

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-versie van dit artikel voor de huidige release.

Door James Newton-King

gRPC- is een taalneutraal RPC-framework (High Performance Remote Procedure Call).

De belangrijkste voordelen van gRPC zijn:

  • Moderne, prestatiegerichte, lichtgewicht RPC-framework.
  • Contract-first API-ontwikkeling, met protocolbuffers standaard, waardoor taalagnostische implementaties mogelijk zijn.
  • Er zijn tools beschikbaar voor veel programmeertalen om sterk getypte servers en clients te genereren.
  • Ondersteunt client-, server- en bidirectionele streaming-aanroepen.
  • Verminderd netwerkgebruik met protobuf binaire serialisatie.

Deze voordelen maken gRPC ideaal voor:

  • Lichtgewicht microservices waarbij efficiĆ«ntie essentieel is.
  • Polyglot-systemen waarbij meerdere talen vereist zijn voor ontwikkeling.
  • Punt-naar-punt-realtimeservices die streamingaanvragen of -antwoorden moeten verwerken.

Tooling-ondersteuning voor C# voor .proto bestanden

gRPC maakt gebruik van een contract-first benadering voor API-ontwikkeling. Services en berichten worden gedefinieerd in .proto bestanden:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

.NET-typen voor services, clients en berichten worden automatisch gegenereerd door het opnemen van .proto bestanden in een project:

  • Voeg een pakketreferentie toe aan het Grpc.Tools-pakket .
  • Voeg .proto bestanden toe aan de <Protobuf> itemgroep.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Zie gRPC-services met C# voor meer informatie over gRPC-hulpprogramma's.

gRPC-services op ASP.NET Core

gRPC-services kunnen worden gehost op ASP.NET Core. Services hebben volledige integratie met ASP.NET Core-functies, zoals logboekregistratie, afhankelijkheidsinjectie (DI), verificatie en autorisatie.

gRPC-services toevoegen aan een ASP.NET Core-app

gRPC vereist het pakket Grpc.AspNetCore. Zie GRPC configureren voor meer informatie over het configureren van gRPC in een .NET-app.

De gRPC-serviceprojectsjabloon

De ASP.NET Core gRPC Service-projectsjabloon biedt een startersservice:

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 neemt over van het GreeterBase type dat wordt gegenereerd door de Greeter service in het .proto bestand. De service wordt toegankelijk gemaakt voor clients in Program.cs:

app.MapGrpcService<GreeterService>();

Zie gRPC-services met ASP.NET Core voor meer informatie over gRPC-services op ASP.NET Core.

GRPC-services aanroepen met een .NET-client

gRPC-clients zijn concrete clienttypen die worden gegenereerd op basis van .proto bestanden. De concrete gRPC-client heeft methoden die vertalen naar de gRPC-service in het .proto-bestand.

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);

Er wordt een gRPC-client gemaakt met behulp van een kanaal, dat een langdurige verbinding met een gRPC-service vertegenwoordigt. Er kan een kanaal worden gemaakt met behulp van GrpcChannel.ForAddress.

Zie GRPC-services aanroepen met de .NET-client voor meer informatie over het maken van clients en het aanroepen van verschillende servicemethoden.

Additional resources

gRPC- is een taalneutraal RPC-framework (High Performance Remote Procedure Call).

De belangrijkste voordelen van gRPC zijn:

  • Moderne, hoogwaardige prestaties, lichtgewicht RPC-framework.
  • Contract-first API-ontwikkeling, met protocolbuffers standaard, waardoor taalagnostische implementaties mogelijk zijn.
  • Er zijn tools beschikbaar voor veel talen om sterk getypte servers en clients te genereren.
  • Ondersteunt client-, server- en bidirectionele streaming-aanroepen.
  • Verminderd netwerkgebruik met protobuf binaire serialisatie.

Deze voordelen maken gRPC ideaal voor:

  • Lichtgewicht microservices waarbij efficiĆ«ntie essentieel is.
  • Polyglot-systemen waarbij meerdere talen vereist zijn voor ontwikkeling.
  • Punt-naar-punt-realtimeservices die streamingaanvragen of -antwoorden moeten verwerken.

Tooling-ondersteuning voor C# voor .proto bestanden

gRPC maakt gebruik van een contract-first benadering voor API-ontwikkeling. Services en berichten worden gedefinieerd in .proto bestanden:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

.NET-typen voor services, clients en berichten worden automatisch gegenereerd door het opnemen van .proto bestanden in een project:

  • Voeg een pakketreferentie toe aan het Grpc.Tools-pakket .
  • Voeg .proto bestanden toe aan de <Protobuf> itemgroep.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Zie gRPC-services met C# voor meer informatie over gRPC-hulpprogramma's.

gRPC-services op ASP.NET Core

gRPC-services kunnen worden gehost op ASP.NET Core. Services hebben volledige integratie met ASP.NET Core-functies, zoals logboekregistratie, afhankelijkheidsinjectie (DI), verificatie en autorisatie.

gRPC-services toevoegen aan een ASP.NET Core-app

gRPC vereist het pakket Grpc.AspNetCore. Zie GRPC configureren voor meer informatie over het configureren van gRPC in een .NET-app.

De gRPC-serviceprojectsjabloon

De gRPC-serviceprojectsjabloon biedt een startersservice:

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 neemt over van het GreeterBase type dat wordt gegenereerd door de Greeter service in het .proto bestand. De service wordt toegankelijk gemaakt voor clients in Startup.cs:

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

Zie gRPC-services met ASP.NET Core voor meer informatie over gRPC-services op ASP.NET Core.

GRPC-services aanroepen met een .NET-client

gRPC-clients zijn concrete clienttypen die worden gegenereerd op basis van .proto bestanden. De concrete gRPC-client heeft methoden die vertalen naar de gRPC-service in het .proto-bestand.

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);

Er wordt een gRPC-client gemaakt met behulp van een kanaal, dat een langdurige verbinding met een gRPC-service vertegenwoordigt. Er kan een kanaal worden gemaakt met behulp van GrpcChannel.ForAddress.

Zie GRPC-services aanroepen met de .NET-client voor meer informatie over het maken van clients en het aanroepen van verschillende servicemethoden.

Additional resources