Dela via


Översikt över gRPC på .NET

Note

Det här är inte den senaste versionen av den här artikeln. För den nuvarande utgåvan, se .NET 9-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 .

Important

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

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.

Additional resources

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 finns tillgängliga för många språk för att generera starkt typade 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.

Additional resources