gRPC for .NET 配置

配置服务选项

Startup.csAddGrpc 配置 gRPC 服务。 下表描述了用于配置 gRPC 服务的选项:

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

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

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
    });
}

单个服务的选项将覆盖 AddGrpc 中提供的全局选项,并且可以使用 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
    });
}

配置客户端选项

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

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

下面的代码:

  • 设置通道上的最大发送和接收消息大小。
  • 创建客户端。
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);
}

Azure 应用服务不支持 gRPC

警告

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

其他资源

上一篇:在浏览器应用中使用 gRPC

下一篇:GRPC 中的身份验证和授权 ASP.NET Core

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程