Я экспериментирую со службой gRP C и клиентом, использующим файлы Proto. Советуем использовать gRP C заводскую интеграцию клиента в. NET Core (https://docs.microsoft.com/en-us/aspnet/core/grpc/clientfactory?view=aspnetcore-3.1). Для этого вы регистрируете клиент, полученный из Grp c .Core.ClientBase, который генерируется пакетом Grp c .Tools, например:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddGrpcClient<MyGrpcClientType>(o =>
{
o.Address = new Uri("https://localhost:5001");
});
})
Насколько я понимаю, MyGrpcClientType зарегистрирован с DI как временный клиент, то есть новый создается каждый раз, когда он вводится, но клиент интегрирован с HttpClientFactory, что позволяет повторно использовать канал, а не создавать его каждый раз.
Теперь я хотел бы использовать protobuf- net .grp c для генерации клиента из интерфейса, что, по-видимому, делается следующим образом:
GrpcClientFactory.AllowUnencryptedHttp2 = true;
using var http = GrpcChannel.ForAddress("http://localhost:10042");
var calculator = http.CreateGrpcService<ICalculator>();
Если я правильно понял, что каналы дороги для создавать, но клиенты дешевы, как мне добиться интеграции с HttpClientFactory (и, таким образом, повторного использования базового канала), используя protobuf- net .grp c? Вышеприведенное, по-видимому, создает GrpcChannel каждый раз, когда я хочу клиента, так каков правильный подход к повторному использованию каналов?
Аналогично, можно ли зарегистрировать сгенерированную службу protobuf- net .grp c класс с приведенным ниже кодом в ASP. Net Core?
endpoints.MapGrpcService<MyGrpcServiceType>();
(Пожалуйста, исправьте все недоразумения в вышеприведенном)