gpt4 book ai didi

c# - Grpc.Core.Channel 和 Grpc.Net.Client.GrpcChannel 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 20:12:38 30 4
gpt4 key购买 nike

我正在用 Grpc 做一些测试,我意识到有这两种类型的 channel ,但我不知道有什么区别。

但是当我使用证书时,我可以使用 Grpc.Net.Client.GrpcChannel 设置证书,但我收到一个错误,即 DNS 未解决。如果我使用 Grpc.Core.Channel,我可以调用该服务,但由于证书的原因,我收到错误消息 - HTTP/2 over TLS 未在仅 HTTP/2 的端点上协商。

2个 channel 有什么区别?

谢谢。

最佳答案

Grpc.Core.Channel 基于 C Core 库,这些库构成了它支持的所有语言变体(C++、C#、PHP、Objective-C、Python、Ruby 等)的基本代码库

Grpc.Net.Client.GrpcChannel 是为 .NET Core 使用熟悉的 HttpClient 对象构建的,该对象现在支持 Http/2。

grpc-dotnet首页指出:

GRPC for .NET does not replace gRPC for C# (gRPC C# API over native C-core binaries). These implementations coexist and share many of the same APIs to avoid lock-in. There are currently no plans for one implementation to replace the other one. gRPC for C# is the recommended solution for frameworks that gRPC for .NET does not support, such as .NET Framework.



当您检查 Grpc.Net.Client.GrpcChannel 的代码时,您可以看到 内部 Httpclient 用于进行异步调用和取消挂起请求的对象。

Grpc.Core.Channel 的代码似乎将其调用委托(delegate)给 native 生成的 grpc 代码。这大约是我在有限的时间内可以花在上面的时间。

有趣的是,在 Net.Client.GrpcChannel 的 ssl 验证部分,它实际上声明它在异常消息传递中使用了 HttpClient。
if (!string.IsNullOrEmpty(rootCertificates) ||
keyCertificatePair != null ||
verifyPeerCallback != null)
{
throw new InvalidOperationException(
$"{nameof(SslCredentials)} with non-null arguments is not supported by {nameof(GrpcChannel)}. " +
$"{nameof(GrpcChannel)} uses HttpClient to make gRPC calls and HttpClient automatically loads root certificates from the operating system certificate store. " +
$"Client certificates should be configured on HttpClient. See https://aka.ms/AA6we64 for details.");
}

关于c# - Grpc.Core.Channel 和 Grpc.Net.Client.GrpcChannel 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59439436/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com