Grpc.Net.ClientFactory NuGet 包中提供了工厂集成。

工厂具有以下优势:

  • 提供了用于配置逻辑 gRPC 客户端实例的中心位置
  • 可管理基础 HttpClientMessageHandler 的生存期
  • 在 ASP.NET Core gRPC 服务中自动传播截止时间和取消

配置 gRPC 客户端

services
    .AddGrpcClient<Greeter.GreeterClient>(o =>
    {
        o.Address = new Uri("https://localhost:5001");
    })
    .ConfigurePrimaryHttpMessageHandler(() =>
    {
        var handler = new HttpClientHandler();
        handler.ClientCertificates.Add(LoadCertificate());
        return handler;
    });

 

配置通道和侦听器

特定于 gRPC 的方法可用于:

  • 配置 gRPC 客户端的基础通道。
  • 添加客户端在进行 gRPC 调用时将使用的 Interceptor 实例。
services
    .AddGrpcClient<Greeter.GreeterClient>(o =>
    {
        o.Address = new Uri("https://localhost:5001");
    })
    .AddInterceptor(() => new LoggingInterceptor())
    .ConfigureChannel(o =>
    {
        o.Credentials = new CustomCredentials();
    });

 

它会自动重用基础通道。

 

截止时间和取消传播

Grpc.AspNetCore.Server.ClientFactory NuGet 包中提供了 EnableCallContextPropagation() 扩展方法。

如果要在调用上下文之外使用客户端,请使用 SuppressContextNotFoundErrors 在配置客户端时禁止显示该错误:

services
    .AddGrpcClient<Greeter.GreeterClient>(o =>
    {
        o.Address = new Uri("https://localhost:5001");
    })
    .EnableCallContextPropagation(o => o.SuppressContextNotFoundErrors = true);

 

相关文章: