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