asp.net-core - protobuf-net.grpc 客户端和 .NET Core 的 gRPC 客户端工厂集成
问题描述
我正在使用 proto 文件试验 gRPC 服务和客户端。建议是在 .NET Core ( https://docs.microsoft.com/en-us/aspnet/core/grpc/clientfactory?view=aspnetcore-3.1 ) 中使用 gRPC 客户端工厂集成。为此,您需要注册从 Grpc.Tools 包生成的 Grpc.Core.ClientBase 派生的客户端,如下所示:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddGrpcClient<MyGrpcClientType>(o =>
{
o.Address = new Uri("https://localhost:5001");
});
})
我的理解是 MyGrpcClientType 被 DI 注册为一个临时客户端,这意味着每次注入时都会创建一个新的,但是客户端与 HttpClientFactory 集成在一起,允许重用通道而不是每次都创建。
现在,我想使用 protobuf-net.grpc 从接口生成客户端,看起来是这样完成的:
GrpcClientFactory.AllowUnencryptedHttp2 = true;
using var http = GrpcChannel.ForAddress("http://localhost:10042");
var calculator = http.CreateGrpcService<ICalculator>();
如果我正确地认为创建通道的成本很高,但客户端很便宜,那么如何使用 protobuf-net.grpc 实现与 HttpClientFactory 的集成(以及底层通道的重用)?上面似乎每次我想要一个客户端时都会创建一个 GrpcChannel ,那么重用通道的正确方法是什么?
同样,是否可以在 ASP.Net Core 中使用以下代码注册 protobuf-net.grpc 生成的服务类?
endpoints.MapGrpcService<MyGrpcServiceType>();
(请纠正以上任何误解)
解决方案
请注意,您不需要-AllowUnencryptedHttp2
只是如果您不使用 https,但是:您似乎正在使用 https。
关于“类似”;这应该已经起作用了-您可能缺少的唯一一点是对services.AddCodeFirstGrpc()
(通常在Startup.cs
,通过ConfigureServices
)的调用。
至于AddGrpcClient
; 我得调查一下。到目前为止,这不是我在集成中探索过的东西。这可能是需要一个新的部分。
推荐阅读
- ssl - TLS 连接 - Beats 到 Redis
- javascript - 无法读取构造类的属性
- sql - 获取按postgresql中另一列分组的平均时间差
- python - 在manim中,如何更改轴号字体颜色
- microsoft-information-protection - MIP SDK:服务不接受身份验证令牌。挑战:['']
- mysql - 复杂的转换和连接不起作用
- c - C 程序在 .txt 文件中看不到最后一个字母
- jquery - Piecemaker2 3D Gallery 替代方案?
- mongodb - Mongodb 通过连接字符串强制只读
- javascript - 使用 polyfill 覆盖一些 Webpack 5 NodeJS 模块