Översikt över gRPC på .NET

Note

Det här är inte den senaste versionen av den här artikeln. Den aktuella versionen finns i .NET 10-versionen av den här artikeln.

Warning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Av James Newton-King

gRPC är ett språkagnostiskt, högpresterande RPC-ramverk (Remote Procedure Call).

De största fördelarna med gRPC är:

  • Modernt, högpresterande, lätt RPC-ramverk.
  • Kontrakt-första API-utveckling, med protokollbuffertar som standard, vilket möjliggör språkagnostiska implementeringar.
  • Verktyg som är tillgängliga för många språk för att generera starkt skrivna servrar och klienter.
  • Stöder klient-, server- och dubbelriktade strömningsanrop.
  • Minskad nätverksanvändning med protobuf binär serialisering.

Dessa fördelar gör gRPC idealiskt för:

  • Lätta mikrotjänster där effektiviteten är kritisk.
  • Flerspråkiga system där flera språk krävs för utveckling.
  • Punkt-till-punkt-realtidstjänster som behöver hantera direktuppspelningsbegäranden eller svar.

Stöd för C#-verktyg för .proto filer

gRPC använder en kontraktsinriktad metod för API-utveckling. Tjänster och meddelanden definieras i .proto filer:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

.NET-typer för tjänster, klienter och meddelanden genereras automatiskt genom att inkludera .proto filer i ett projekt:

  • Lägg till en paketreferens till Grpc.Tools-paketet .
  • Lägg till .proto filer i <Protobuf> objektgruppen.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Mer information om stöd för gRPC-verktyg finns i gRPC-tjänster med C#.

gRPC-tjänster på ASP.NET Core

gRPC-tjänster kan finnas på ASP.NET Core. Tjänsterna har fullständig integrering med ASP.NET Core-funktioner som loggning, beroendeinmatning (DI), autentisering och auktorisering.

Lägga till gRPC-tjänster i en ASP.NET Core-app

gRPC kräver paketet Grpc.AspNetCore. Information om hur du konfigurerar gRPC i en .NET-app finns i Konfigurera gRPC.

gRPC-tjänstprojektmallen

Projektmallen ASP.NET Core gRPC Service tillhandahåller en starttjänst:

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 ärver från typen GreeterBase som genereras från Greeter tjänsten i .proto filen. Tjänsten görs tillgänglig för klienter i Program.cs:

app.MapGrpcService<GreeterService>();

Mer information om gRPC-tjänster på ASP.NET Core finns i gRPC-tjänster med ASP.NET Core.

Anropa gRPC-tjänster med en .NET-klient

gRPC-klienter är konkreta klienttyper som genereras från .proto filer. Den konkreta gRPC-klienten har metoder som översätter till gRPC-tjänsten i filen .proto.

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

En gRPC-klient skapas med hjälp av en kanal som representerar en långvarig anslutning till en gRPC-tjänst. En kanal kan skapas med hjälp av GrpcChannel.ForAddress.

Mer information om hur du skapar klienter och anropar olika tjänstmetoder finns i Anropa gRPC-tjänster med .NET-klienten.

Ytterligare resurser

gRPC är ett språkagnostiskt, högpresterande RPC-ramverk (Remote Procedure Call).

De största fördelarna med gRPC är:

  • Modernt, högpresterande, lätt RPC-ramverk.
  • Kontrakt-första API-utveckling, med protokollbuffertar som standard, vilket möjliggör språkagnostiska implementeringar.
  • Verktyg som är tillgängliga för många språk för att generera starkt skrivna servrar och klienter.
  • Stöder klient-, server- och dubbelriktade strömningsanrop.
  • Minskad nätverksanvändning med protobuf binär serialisering.

Dessa fördelar gör gRPC idealiskt för:

  • Lätta mikrotjänster där effektiviteten är kritisk.
  • Flerspråkiga system där flera språk krävs för utveckling.
  • Punkt-till-punkt-realtidstjänster som behöver hantera direktuppspelningsbegäranden eller svar.

Stöd för C#-verktyg för .proto filer

gRPC använder en kontraktsinriktad metod för API-utveckling. Tjänster och meddelanden definieras i .proto filer:

syntax = "proto3";

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

.NET-typer för tjänster, klienter och meddelanden genereras automatiskt genom att inkludera .proto filer i ett projekt:

  • Lägg till en paketreferens till Grpc.Tools-paketet .
  • Lägg till .proto filer i <Protobuf> objektgruppen.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Mer information om stöd för gRPC-verktyg finns i gRPC-tjänster med C#.

gRPC-tjänster på ASP.NET Core

gRPC-tjänster kan finnas på ASP.NET Core. Tjänsterna har fullständig integrering med ASP.NET Core-funktioner som loggning, beroendeinmatning (DI), autentisering och auktorisering.

Lägga till gRPC-tjänster i en ASP.NET Core-app

gRPC kräver paketet Grpc.AspNetCore. Information om hur du konfigurerar gRPC i en .NET-app finns i Konfigurera gRPC.

gRPC-tjänstprojektmallen

Projektmallen för gRPC-tjänst erbjuder en grundtjänst:

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 ärver från typen GreeterBase som genereras från Greeter tjänsten i .proto filen. Tjänsten görs tillgänglig för klienter i Startup.cs:

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

Mer information om gRPC-tjänster på ASP.NET Core finns i gRPC-tjänster med ASP.NET Core.

Anropa gRPC-tjänster med en .NET-klient

gRPC-klienter är konkreta klienttyper som genereras från .proto filer. Den konkreta gRPC-klienten har metoder som översätter till gRPC-tjänsten i filen .proto.

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

En gRPC-klient skapas med hjälp av en kanal som representerar en långvarig anslutning till en gRPC-tjänst. En kanal kan skapas med hjälp av GrpcChannel.ForAddress.

Mer information om hur du skapar klienter och anropar olika tjänstmetoder finns i Anropa gRPC-tjänster med .NET-klienten.

Ytterligare resurser