protobuf-net.grpc客户端和.NET Core的gRPC客户端工厂集成

时间:2020-03-26 14:28:04

标签: asp.net-core .net-core protobuf-net grpc-dotnet

我正在试验使用原型文件的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>();

(请更正上面的任何误解)

2 个答案:

答案 0 :(得分:2)

请注意,您不需要 AllowUnencryptedHttp2-就是说,如果您不使用https,但是:您似乎正在使用https。

在“类似”;应该已经可以正常工作了-您可能唯一缺少的是对services.AddCodeFirstGrpc()的调用(通常在Startup.cs中,通过ConfigureServices进行调用。

关于AddGrpcClient;我将不得不调查。到目前为止,我还没有探索过这种东西。可能需要新的东西。

答案 1 :(得分:0)

Client Factory支持不存在,并且可以exactly like documented here使用,除非您使用方法注册

services.AddCodeFirstGrpcClient<IMyService>(o =>
{
    o.Address = new Uri("...etc...");
});