configuração do gRPC para .NETgRPC for .NET configuration

Configurar opções de serviçosConfigure services options

os serviços gRPCs são configurados com o AddGrpc no Startup.cs.gRPC services are configured with AddGrpc in Startup.cs. A tabela a seguir descreve as opções para configurar os serviços gRPCs:The following table describes options for configuring gRPC services:

OpçãoOption Valor padrãoDefault Value DescriçãoDescription
MaxSendMessageSizeMaxSendMessageSize null O tamanho máximo da mensagem em bytes que pode ser enviado do servidor.The maximum message size in bytes that can be sent from the server. A tentativa de enviar uma mensagem que exceda o tamanho máximo da mensagem configurada resultará em uma exceção.Attempting to send a message that exceeds the configured maximum message size results in an exception. Quando definido como null , o tamanho da mensagem é ilimitado.When set to null, the message size is unlimited.
MaxReceiveMessageSizeMaxReceiveMessageSize 4 MB4 MB O tamanho máximo da mensagem em bytes que pode ser recebido pelo servidor.The maximum message size in bytes that can be received by the server. Se o servidor receber uma mensagem que exceda esse limite, ele lançará uma exceção.If the server receives a message that exceeds this limit, it throws an exception. Aumentar esse valor permite que o servidor receba mensagens maiores, mas pode afetar negativamente o consumo de memória.Increasing this value allows the server to receive larger messages, but can negatively impact memory consumption. Quando definido como null , o tamanho da mensagem é ilimitado.When set to null, the message size is unlimited.
EnableDetailedErrorsEnableDetailedErrors false Se true , as mensagens de exceção detalhadas serão retornadas aos clientes quando uma exceção for lançada em um método de serviço.If true, detailed exception messages are returned to clients when an exception is thrown in a service method. O padrão é false.The default is false. EnableDetailedErrorsA configuração para true pode vazar informações confidenciais.Setting EnableDetailedErrors to true can leak sensitive information.
CompressionProvidersCompressionProviders gzipgzip Uma coleção de provedores de compactação usados para compactar e descompactar mensagens.A collection of compression providers used to compress and decompress messages. Os provedores de compactação personalizados podem ser criados e adicionados à coleção.Custom compression providers can be created and added to the collection. Os provedores configurados padrão dão suporte à compactação gzip .The default configured providers support gzip compression.
ResponseCompressionAlgorithmResponseCompressionAlgorithm null O algoritmo de compactação usado para compactar mensagens enviadas do servidor.The compression algorithm used to compress messages sent from the server. O algoritmo deve corresponder a um provedor de compactação no CompressionProviders .The algorithm must match a compression provider in CompressionProviders. Para que o algoritmo compacte uma resposta, o cliente deve indicar que ele dá suporte ao algoritmo enviando-o no cabeçalho grpc-Accept-Encoding .For the algorithm to compress a response, the client must indicate it supports the algorithm by sending it in the grpc-accept-encoding header.
ResponseCompressionLevelResponseCompressionLevel null O nível de compactação usado para compactar mensagens enviadas do servidor.The compress level used to compress messages sent from the server.
InterceptadoresInterceptors NenhumNone Uma coleção de interceptores que são executados com cada chamada gRPC.A collection of interceptors that are run with each gRPC call. Os interceptores são executados na ordem em que estão registrados.Interceptors are run in the order they are registered. Os interceptores configurados globalmente são executados antes de interceptadores configurados para um único serviço.Globally configured interceptors are run before interceptors configured for a single service. Para obter mais informações sobre os interceptores gRPC, consulte interceptores do gRPC vs. middleware.For more information about gRPC interceptors, see gRPC Interceptors vs. Middleware.
IgnoreUnknownServicesIgnoreUnknownServices false Se true , as chamadas para serviços e métodos desconhecidos não retornarão um status não implementado e a solicitação passará para o próximo middleware registrado no ASP.NET Core.If true, calls to unknown services and methods don't return an UNIMPLEMENTED status, and the request passes to the next registered middleware in ASP.NET Core.

As opções podem ser configuradas para todos os serviços, fornecendo um delegado de opções para a AddGrpc chamada em Startup.ConfigureServices :Options can be configured for all services by providing an options delegate to the AddGrpc call in Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.EnableDetailedErrors = true;
        options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
        options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    });
}

As opções para um único serviço substituem as opções globais fornecidas no AddGrpc e podem ser configuradas usando AddServiceOptions<TService> :Options for a single service override the global options provided in AddGrpc and can be configured using AddServiceOptions<TService>:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc().AddServiceOptions<MyService>(options =>
    {
        options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
        options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    });
}

Configurar opções do clienteConfigure client options

a configuração do cliente gRPC está definida em GrpcChannelOptions .gRPC client configuration is set on GrpcChannelOptions. A tabela a seguir descreve as opções para configurar os canais gRPC:The following table describes options for configuring gRPC channels:

OpçãoOption Valor padrãoDefault Value DescriçãoDescription
HttpHandlerHttpHandler Nova instânciaNew instance O HttpMessageHandler usado para fazer chamadas gRPC.The HttpMessageHandler used to make gRPC calls. Um cliente pode ser definido para configurar um personalizado HttpClientHandler ou adicionar manipuladores adicionais ao pipeline http para chamadas gRPC.A client can be set to configure a custom HttpClientHandler or add additional handlers to the HTTP pipeline for gRPC calls. Se não HttpMessageHandler for especificado, uma nova HttpClientHandler instância será criada para o canal com descarte automático.If no HttpMessageHandler is specified, a new HttpClientHandler instance is created for the channel with automatic disposal.
HttpClientHttpClient null O HttpClient usado para fazer chamadas gRPC.The HttpClient used to make gRPC calls. Essa configuração é uma alternativa para HttpHandler .This setting is an alternative to HttpHandler.
DisposeHttpClientDisposeHttpClient false Se for definido como true e um HttpMessageHandler ou HttpClient for especificado, o HttpHandler ou HttpClient , respectivamente, será Descartado quando o GrpcChannel for descartado.If set to true and an HttpMessageHandler or HttpClient is specified, then either the HttpHandler or HttpClient, respectively, is disposed when the GrpcChannel is disposed.
LoggerFactoryLoggerFactory null O LoggerFactory usado pelo cliente para registrar informações sobre chamadas gRPC.The LoggerFactory used by the client to log information about gRPC calls. Uma LoggerFactory instância pode ser resolvida da injeção de dependência ou criada usando LoggerFactory.Create .A LoggerFactory instance can be resolved from dependency injection or created using LoggerFactory.Create. Para obter exemplos de configuração de registro em log, consulte Registro em log e diagnóstico no gRPC no .NET .For examples of configuring logging, see Registro em log e diagnóstico no gRPC no .NET.
MaxSendMessageSizeMaxSendMessageSize null O tamanho máximo da mensagem em bytes que pode ser enviado do cliente.The maximum message size in bytes that can be sent from the client. A tentativa de enviar uma mensagem que exceda o tamanho máximo da mensagem configurada resultará em uma exceção.Attempting to send a message that exceeds the configured maximum message size results in an exception. Quando definido como null , o tamanho da mensagem é ilimitado.When set to null, the message size is unlimited.
MaxReceiveMessageSizeMaxReceiveMessageSize 4 MB4 MB O tamanho máximo da mensagem em bytes que pode ser recebido pelo cliente.The maximum message size in bytes that can be received by the client. Se o cliente receber uma mensagem que exceda esse limite, ele lançará uma exceção.If the client receives a message that exceeds this limit, it throws an exception. Aumentar esse valor permite que o cliente receba mensagens maiores, mas pode afetar negativamente o consumo de memória.Increasing this value allows the client to receive larger messages, but can negatively impact memory consumption. Quando definido como null , o tamanho da mensagem é ilimitado.When set to null, the message size is unlimited.
CredenciaisCredentials null Uma instância ChannelCredentials.A ChannelCredentials instance. As credenciais são usadas para adicionar metadados de autenticação a chamadas gRPC.Credentials are used to add authentication metadata to gRPC calls.
CompressionProvidersCompressionProviders gzipgzip Uma coleção de provedores de compactação usados para compactar e descompactar mensagens.A collection of compression providers used to compress and decompress messages. Os provedores de compactação personalizados podem ser criados e adicionados à coleção.Custom compression providers can be created and added to the collection. Os provedores configurados padrão dão suporte à compactação gzip .The default configured providers support gzip compression.

O seguinte código:The following code:

  • Define o tamanho máximo de mensagens de envio e recebimento no canal.Sets the maximum send and receive message size on the channel.
  • Cria um cliente.Creates a client.
static async Task Main(string[] args)
{
    var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        MaxReceiveMessageSize = 5 * 1024 * 1024, // 5 MB
        MaxSendMessageSize = 2 * 1024 * 1024 // 2 MB
    });
    var client = new Greeter.GreeterClient(channel);

    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
}

Aviso

No momento, não há suporte para o ASP.NET Core gRPC no serviço Azure app ou no IIS.ASP.NET Core gRPC is not currently supported on Azure App Service or IIS. A implementação HTTP/2 de http. sys não dá suporte a cabeçalhos de direita de resposta HTTP dos quais o gRPC se baseia.The HTTP/2 implementation of Http.Sys does not support HTTP response trailing headers which gRPC relies on. Para obter mais informações, consulte este problema do GitHub.For more information, see this GitHub issue.

Recursos adicionaisAdditional resources