Présentation de gRPC sur .NET CoreIntroduction to gRPC on .NET Core

Par John Luo et James Newton-KingBy John Luo and James Newton-King

gRPC est un framework d’appel de procédure distante (RPC) indépendant du langage et très performant.gRPC is a language agnostic, high-performance Remote Procedure Call (RPC) framework.

Les principaux avantages de gRPC sont :The main benefits of gRPC are:

  • Infrastructure RPC moderne, hautement performante et légère.Modern, high-performance, lightweight RPC framework.
  • Développement d’API « Contract-first », à l’aide de mémoires tampons de protocole par défaut, permettant des implémentations indépendantes du langage.Contract-first API development, using Protocol Buffers by default, allowing for language agnostic implementations.
  • Outils disponibles pour de nombreux langages afin de générer des clients et serveurs fortement typés.Tooling available for many languages to generate strongly-typed servers and clients.
  • Prise en charge d’appels de streaming client, serveur et bidirectionnels.Supports client, server, and bi-directional streaming calls.
  • Utilisation réduite du réseau avec sérialisation binaire Protobuf.Reduced network usage with Protobuf binary serialization.

Ces avantages font de gRPC la solution idéale pour :These benefits make gRPC ideal for:

  • Les microservices légers où l’efficacité est essentielle.Lightweight microservices where efficiency is critical.
  • Les systèmes polyglottes où plusieurs langages sont nécessaires au développement.Polyglot systems where multiple languages are required for development.
  • Les services en temps réel de point à point qui doivent gérer des demandes ou réponses de streaming.Point-to-point real-time services that need to handle streaming requests or responses.

C#Prise en charge des outils pour les fichiers. protoC# Tooling support for .proto files

gRPC utilise une approche contrat d’abord pour le développement d’API.gRPC uses a contract-first approach to API development. Les services et les messages sont * définis dans les fichiers. 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;
}

Les types .net pour les services, les clients et les messages sont * générés automatiquement par l’inclusion de fichiers. proto dans un projet :.NET types for services, clients and messages are automatically generated by including *.proto files in a project:

  • Ajoutez une référence de package au package GRPC. Tools .Add a package reference to Grpc.Tools package.
  • Ajoutez* des<Protobuf> fichiers. proto au groupe d’éléments.Add *.proto files to the <Protobuf> item group.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Pour plus d’informations sur la prise en charge des Services gRPC avec C#outils gRPC, consultez.For more information on gRPC tooling support, see Services gRPC avec C#.

services gRPC sur ASP.NET CoregRPC services on ASP.NET Core

les services gRPC peuvent être hébergés sur ASP.NET Core.gRPC services can be hosted on ASP.NET Core. Les services ont une intégration complète aux fonctionnalités populaires de ASP.NET Core telles que la journalisation, l’injection de dépendances, l’authentification et l’autorisation.Services have full integration with popular ASP.NET Core features such as logging, dependency injection (DI), authentication and authorization.

Le modèle de projet de service gRPC fournit un service de démarrage :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
        });
    }
}

GreeterServicehérite du GreeterBase type, qui est généré à partir du Greeter service dans le *fichier. proto .GreeterService inherits from the GreeterBase type, which is generated from the Greeter service in the *.proto file. Le service est rendu accessible aux clients dans Startup.cs:The service is made accessible to clients in Startup.cs:

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

Pour en savoir plus sur les services gRPC sur ASP.NET Core Services gRPC avec ASP.NET Core, consultez.To learn more about gRPC services on ASP.NET Core, see Services gRPC avec ASP.NET Core.

Appeler gRPC services avec un client .NETCall gRPC services with a .NET client

les clients gRPC sont des types de client concrets qui sont générés à partir de *fichiers. proto .gRPC clients are concrete client types that are generated from *.proto files. Le client gRPC concret possède des méthodes qui traduisent le service gRPC dans le *fichier. 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.SayHello(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

Un client gRPC est créé à l’aide d’un canal, qui représente une connexion à long terme à un service gRPC.A gRPC client is created using a channel, which represents a long-lived connection to a gRPC service. Un canal peut être créé à GrpcChannel.ForAddressl’aide de.A channel can be created using GrpcChannel.ForAddress.

Pour plus d’informations sur la création de clients et l’appel de différentes Appeler gRPC services avec le client .NETméthodes de service, consultez.For more information on creating clients, and calling different service methods, see Appeler gRPC services avec le client .NET.

gRPC non pris en charge sur Azure App ServicegRPC not supported on Azure App Service

Avertissement

ASP.net Core gRPC n’est actuellement pas pris en charge sur Azure App service ou IIS.ASP.NET Core gRPC is not currently supported on Azure App Service or IIS. L’implémentation HTTP/2 de http. sys ne prend pas en charge les en-têtes de fin de réponse HTTP sur lesquels gRPC s’appuie.The HTTP/2 implementation of Http.Sys does not support HTTP response trailing headers which gRPC relies on. Pour plus d’informations, consultez ce problème GitHub.For more information, see this GitHub issue.

Ressources supplémentairesAdditional resources