适用于 .NET 的 gRPC 配置gRPC for .NET configuration

本文内容

配置服务选项Configure services options

gRPC 服务在 Startup.cs 中使用 AddGrpc 进行配置。下表描述了用于配置 gRPC 服务的选项:

选项默认值描述
MaxSendMessageSizenull可以从服务器发送的最大消息大小(以字节为单位)。尝试发送超过配置的最大消息大小的消息会导致异常。
MaxReceiveMessageSize4 MB可以由服务器接收的最大消息大小(以字节为单位)。如果服务器收到的消息超过此限制,则会引发异常。增大此值可使服务器接收更大的消息,但可能会对内存消耗产生负面影响。
EnableDetailedErrorsfalse如果为 true,则当服务方法中引发异常时,会将详细异常消息返回到客户端。默认值为 falseEnableDetailedErrors 设置为 true 可能会泄漏敏感信息。
CompressionProvidersgzip用于压缩和解压缩消息的压缩提供程序的集合。可以创建自定义压缩提供程序并将其添加到集合中。默认已配置提供程序支持 gzip 压缩。
ResponseCompressionAlgorithmnull压缩算法用于压缩从服务器发送的消息。该算法必须与 CompressionProviders 中的压缩提供程序匹配。若要使算法可压缩响应,客户端必须通过在 grpc-accept-encoding 标头中进行发送来指示它支持算法。
ResponseCompressionLevelnull用于压缩从服务器发送的消息的压缩级别。
拦截器None随每个 gRPC 调用一起运行的侦听器的集合。侦听器按注册顺序运行。全局配置的侦听器在为单个服务配置的侦听器之前运行。有关 gRPC 侦听器的详细信息,请参阅 gRPC 侦听器与中间件

可以通过在 Startup.ConfigureServices 中向 AddGrpc 调用提供选项委托,为所有服务配置选项:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddGrpc(options =>
  4. {
  5. options.EnableDetailedErrors = true;
  6. options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
  7. options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
  8. });
  9. }

用于单个服务的选项会替代 AddGrpc 中提供的全局选项,可以使用 AddServiceOptions<TService> 进行配置:

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

配置客户端选项Configure client options

gRPC 客户端配置在 GrpcChannelOptions 中进行设置。下表描述了用于配置 gRPC 通道的选项:

选项默认值描述
HttpClient新实例用于进行 gRPC 调用的 HttpClient可以将客户端设置为配置自定义 HttpClientHandler,或将附加处理程序添加到 gRPC 调用的 HTTP 管道。如果未指定 HttpClient,则会为通道创建新 HttpClient 实例。它会自动进行处置。
DisposeHttpClientfalse如果为 true 并且指定了 HttpClient,则在处置 GrpcChannel 时会处置 HttpClient 实例。
LoggerFactorynull客户端用于记录有关 gRPC 调用的信息的 LoggerFactory可以通过依赖项注入来解析或使用 LoggerFactory.Create 来创建 LoggerFactory 实例。有关配置日志记录的示例,请参阅 .NET 上 gRPC 中的日志记录和诊断
MaxSendMessageSizenull可以从客户端发送的最大消息大小(以字节为单位)。尝试发送超过配置的最大消息大小的消息会导致异常。
MaxReceiveMessageSize4 MB可以由客户端接收的最大消息大小(以字节为单位)。如果客户端收到的消息超过此限制,则会引发异常。增大此值可使客户端接收更大的消息,但可能会对内存消耗产生负面影响。
凭据null一个 ChannelCredentials 实例。凭据用于将身份验证元数据添加到 gRPC 调用。
CompressionProvidersgzip用于压缩和解压缩消息的压缩提供程序的集合。可以创建自定义压缩提供程序并将其添加到集合中。默认已配置提供程序支持 gzip 压缩。

下面的代码:

  • 设置通道上发送和接收的最大消息大小。
  • 创建客户端。
  1. static async Task Main(string[] args)
  2. {
  3. var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
  4. {
  5. MaxReceiveMessageSize = 5 * 1024 * 1024, // 5 MB
  6. MaxSendMessageSize = 2 * 1024 * 1024 // 2 MB
  7. });
  8. var client = new Greeter.GreeterClient(channel);
  9. var reply = await client.SayHelloAsync(
  10. new HelloRequest { Name = "GreeterClient" });
  11. Console.WriteLine("Greeting: " + reply.Message);
  12. }

Azure 应用服务不支持 gRPCgRPC not supported on Azure App Service

警告

Azure 应用服务或 IIS 当前不支持 ASP.NET Core gRPCHttp.Sys 的 HTTP/2 实现不支持 gRPC 依赖的 HTTP 响应尾随标头。有关详细信息,请参阅此 GitHub 问题

其他资源Additional resources