Asp.net core protobuf-net.grpc客户端和.net核心&x27;s gRPC客户端工厂集成

Asp.net core protobuf-net.grpc客户端和.net核心&x27;s gRPC客户端工厂集成,asp.net-core,.net-core,protobuf-net,grpc-dotnet,Asp.net Core,.net Core,Protobuf Net,Grpc Dotnet,我正在试验gRPC服务和使用原型文件的客户端。建议在.NET Core()中使用gRPC客户端工厂集成。为此,请注册从Grpc.Core.ClientBase派生的客户端,该客户端由Grpc.Tools包生成,如下所示: Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddGrpcClient<MyGrpcClientTy

我正在试验gRPC服务和使用原型文件的客户端。建议在.NET Core()中使用gRPC客户端工厂集成。为此,请注册从Grpc.Core.ClientBase派生的客户端,该客户端由Grpc.Tools包生成,如下所示:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddGrpcClient<MyGrpcClientType>(o =>
        {
            o.Address = new Uri("https://localhost:5001");
        });
    })
GrpcClientFactory.AllowUnencryptedHttp2 = true;
using var http = GrpcChannel.ForAddress("http://localhost:10042");
var calculator = http.CreateGrpcService<ICalculator>();
Host.CreateDefaultBuilder(args)
.ConfigureServices((主机上下文,服务)=>
{
services.AddGrpcClient(o=>
{
o、 地址=新Uri(“https://localhost:5001");
});
})
我的理解是,MyGrpcClientType在DI中注册为临时客户机,这意味着每次注入时都会创建一个新的客户机,但该客户机与HttpClientFactory集成,允许重用通道,而不是每次创建通道

现在,我想使用protobuf-net.grpc从一个接口生成客户机,其操作如下:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddGrpcClient<MyGrpcClientType>(o =>
        {
            o.Address = new Uri("https://localhost:5001");
        });
    })
GrpcClientFactory.AllowUnencryptedHttp2 = true;
using var http = GrpcChannel.ForAddress("http://localhost:10042");
var calculator = http.CreateGrpcService<ICalculator>();
GrpcClientFactory.AllowUnencryptedHttp2=true;
使用var http=GrpcChannel.ForAddress(“http://localhost:10042");
var calculator=http.CreateGrpcService();
如果我正确地认为创建渠道成本很高,但客户端成本很低,那么如何使用protobuf-net.grpc实现与HttpClientFactory的集成(从而重用底层渠道)?每当我需要一个客户机时,上面的内容似乎都会创建一个GrpcChannel,那么重用通道的正确方法是什么呢

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

endpoints.MapGrpcService()

(请纠正上述任何误解)

注意,您不需要
AllowUnencryptedHttp2
-这只是因为您没有使用https,但是:您似乎正在使用https

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

至于
AddGrpcClient
;我必须调查。到目前为止,我还没有在集成中探讨过这一点。可能需要一个新的部件。

该支持不存在,除非您使用该方法注册,否则该支持有效

services.AddCodeFirstGrpcClient(o=>
{
o、 地址=新Uri(“…等…”);
});

感谢您极其迅速的回复Marc-非常感谢。对于读者来说,这是服务启动的一个例子。cs:Marc-当您有机会研究HttpClientFactory集成时,您会在这里发布您的发现吗?我很想了解它是如何工作的,你在想什么。再次感谢。@Julius这是我最初的想法;对于在API中使用,您感觉如何?如果我们这样做,我认为我们可以让它工作(这是一个新的实验性API,实际上并不存在)@Julius我建议对
Grpc.Net.ClientFactory
进行一些API更改,以直接让它工作: