Wprowadzenie do gRPC na platformie .NET CoreIntroduction to gRPC on .NET Core

Przez John Luo i Kuba Kowalski-królaBy John Luo and James Newton-King

gRPC to język niezależny od i środowisko zdalnego wywołania procedury (RPC) o wysokiej wydajności.gRPC is a language agnostic, high-performance Remote Procedure Call (RPC) framework.

Główne zalety struktury gRPC są następujące:The main benefits of gRPC are:

  • Nowoczesna, wysoce wydajna i uproszczona struktura RPC.Modern, high-performance, lightweight RPC framework.
  • Tworzenie interfejsu API za pomocą podejścia „najpierw kontrakt” z domyślnym użyciem buforów protokołu, co umożliwia implementacje niezależne od języka.Contract-first API development, using Protocol Buffers by default, allowing for language agnostic implementations.
  • Dostępne dla wielu języków narzędzia do generowania silnie typizowanych serwerów i klientów.Tooling available for many languages to generate strongly-typed servers and clients.
  • Obsługa wywołania przesyłania strumieniowego klienta, serwera i dwukierunkowego.Supports client, server, and bi-directional streaming calls.
  • Zredukowane użycie sieci dzięki serializacji binarnej Protobuf.Reduced network usage with Protobuf binary serialization.

Te korzyści sprawiają, że gRPC doskonale nadaje się do:These benefits make gRPC ideal for:

  • Lekkie mikrousługi, w których wydajność jest krytyczna.Lightweight microservices where efficiency is critical.
  • Systemy Polyglot, w których wiele języków jest wymaganych do programowania.Polyglot systems where multiple languages are required for development.
  • Usługi w czasie rzeczywistym, które muszą obsługiwać żądania przesyłania strumieniowego lub odpowiedzi.Point-to-point real-time services that need to handle streaming requests or responses.

Ostrzeżenie

ASP.NET Core gRPC nie jest obecnie obsługiwana w Azure App Service lub IIS.ASP.NET Core gRPC is not currently supported on Azure App Service or IIS. Implementacja protokołu HTTP/2 Http.Sys nie obsługuje nagłówków końcowych odpowiedzi HTTP, na których opiera się gRPC.The HTTP/2 implementation of Http.Sys does not support HTTP response trailing headers which gRPC relies on. Aby uzyskać więcej informacji, zobacz ten problemw serwisie GitHub.For more information, see this GitHub issue.

Obsługa narzędzi C# dla plików. protoC# Tooling support for .proto files

gRPC używa podejścia pierwszego kontraktu do programowania interfejsu API.gRPC uses a contract-first approach to API development. Usługi i komunikaty są zdefiniowane w plikach * . proto :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;
}

Typy .NET dla usług, klientów i komunikatów są generowane automatycznie przez dołączenie plików * proto w projekcie:.NET types for services, clients and messages are automatically generated by including *.proto files in a project:

  • Dodaj odwołanie do pakietu do pakietu GRPC. Tools .Add a package reference to Grpc.Tools package.
  • Dodaj pliki * . proto do <Protobuf> grupy elementów.Add *.proto files to the <Protobuf> item group.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Więcej informacji o obsłudze narzędzi gRPC można znaleźć w temacie Usługi gRPC w środowisku C# .For more information on gRPC tooling support, see Usługi gRPC w środowisku C#.

usługi gRPC Services na ASP.NET CoregRPC services on ASP.NET Core

usługi gRPC Services mogą być hostowane na ASP.NET Core.gRPC services can be hosted on ASP.NET Core. Usługi mają pełną integrację z popularnymi funkcjami ASP.NET Core, takimi jak rejestrowanie, iniekcja zależności (DI), uwierzytelnianie i autoryzacja.Services have full integration with popular ASP.NET Core features such as logging, dependency injection (DI), authentication and authorization.

Szablon projektu usługi gRPC to usługa początkowa: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
        });
    }
}

GreeterServicedziedziczy z GreeterBase typu, który jest generowany na podstawie Greeter usługi w pliku * . proto .GreeterService inherits from the GreeterBase type, which is generated from the Greeter service in the *.proto file. Usługa jest dostępna dla klientów w Startup.cs :The service is made accessible to clients in Startup.cs :

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

Aby dowiedzieć się więcej na temat usług gRPC Services na ASP.NET Core, zobacz Usługi gRPC na platformie ASP.NET Core .To learn more about gRPC services on ASP.NET Core, see Usługi gRPC na platformie ASP.NET Core.

Wywoływanie usług gRPC za pomocą klienta platformy .NETCall gRPC services with a .NET client

gRPC klienci są konkretnymi typami klientów, które są generowane z plików * . proto.gRPC clients are concrete client types that are generated from *.proto files. Konkretny klient gRPC ma metody, które są tłumaczone na usługę gRPC w pliku * . proto .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.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

Klient gRPC jest tworzony przy użyciu kanału, który reprezentuje długotrwałe połączenie z usługą gRPC.A gRPC client is created using a channel, which represents a long-lived connection to a gRPC service. Kanał można utworzyć przy użyciu GrpcChannel.ForAddress .A channel can be created using GrpcChannel.ForAddress.

Aby uzyskać więcej informacji na temat tworzenia klientów i wywoływania różnych metod usługi, zobacz Wywoływanie usług gRPC przy użyciu klienta platformy .NET .For more information on creating clients, and calling different service methods, see Wywoływanie usług gRPC przy użyciu klienta platformy .NET.

Dodatkowe zasobyAdditional resources