首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >protobuf net.grpc客户端与.NET Core的gRPC客户端工厂集成

protobuf net.grpc客户端与.NET Core的gRPC客户端工厂集成
EN

Stack Overflow用户
提问于 2020-03-26 14:28:04
回答 2查看 2.8K关注 0票数 1

我正在试验使用proto文件的gRPC服务和客户端。建议在gRPC核心( .NET Core,https://learn.microsoft.com/en-us/aspnet/core/grpc/clientfactory?view=aspnetcore-3.1)中使用.NET客户端工厂集成。为此,您需要注册从Grpc.Core.ClientBase派生的客户机,该客户端由Grpc.Tools包生成,如下所示:

代码语言:javascript
复制
Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddGrpcClient<MyGrpcClientType>(o =>
        {
            o.Address = new Uri("https://localhost:5001");
        });
    })

我的理解是,MyGrpcClientType是作为临时客户端在DI中注册的,这意味着每次注入时都会创建一个新的客户机,但是客户端与HttpClientFactory集成在一起,从而允许信道被重用,而不是每次创建。

现在,我想使用protobuf-net.grpc从一个接口生成客户机,这似乎是这样做的:

代码语言:javascript
复制
GrpcClientFactory.AllowUnencryptedHttp2 = true;
using var http = GrpcChannel.ForAddress("http://localhost:10042");
var calculator = http.CreateGrpcService<ICalculator>();

如果我正确地认为创建通道很昂贵,但客户端很便宜,那么如何使用protobuf-net.grpc实现与HttpClientFactory的集成(以及底层通道的重用)?在每次我想要客户端时,上面的内容似乎都会创建一个GrpcChannel,那么重用通道的正确方法是什么呢?

类似地,是否可以使用ASP.Net核心中的以下代码注册protobuf-net.grpc生成的服务类?

endpoints.MapGrpcService<MyGrpcServiceType>();

(请纠正上述误解)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-26 14:54:19

请注意,您不需要AllowUnencryptedHttp2 --这只是如果您没有使用https,但是:您似乎在使用https。

在“类似”上,这应该已经起作用了--您可能缺少的唯一一点是对services.AddCodeFirstGrpc()的调用(通常在Startup.cs中,通过ConfigureServices)。

至于AddGrpcClient,我得调查一下。到目前为止,我还没有在集成中探索过这一点。可能需要一件新的作品。

票数 2
EN

Stack Overflow用户

发布于 2020-07-03 06:10:27

客户工厂支持不存在,除了向方法注册之外,它可以工作就像这里记录的一样

代码语言:javascript
复制
services.AddCodeFirstGrpcClient<IMyService>(o =>
{
    o.Address = new Uri("...etc...");
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60869533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档