是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 一起使用?

Gra*_*Cat 9 c# http-1.1 http2 grpc asp.net-core

我有两个网络服务 - gRPC 客户端和 gRPC 服务器。服务器是用 .NET Core 编写的,因此对 gRPC 强制执行 HTTP/2。但是,客户端是托管在 IIS 8.5 上的 .NET Framework 4.7.2 Web 应用程序,因此它仅支持 HTTP/1.1

由于升级客户端需要一些时间,我在想是否可以在服务器端使用 HTTP/1.1 而不是 HTTP/2,但我找不到任何有关如何实现的信息。

是否可以将 HTTP/1.1 用于用 .NET Core 编写的 gRPC 服务器?如果是这样 - 如何?

Mar*_*ell 10

不,您不能在 HTTP 1.1 上使用 gRPC;但是,您可以使用 Grpc.Core Google 传输实现,而不是托管的 Microsoft 位;这针对 .NET Standard 1.5 和 .NET Standard 2.0,因此应该适用于 .NET Core,并使用特定于操作系统的非托管二进制文件 (chttp2) 进行传输。

对于客户端,两者几乎没有区别;只有实际的频道创建变化,在:

GrpcChannel.ForAddress(...)
Run Code Online (Sandbox Code Playgroud)

使用 Microsoft 传输,以及

new Channel(...)
Run Code Online (Sandbox Code Playgroud)

与谷歌传输。所有其余的 API 都是共享的(在 Grpc.Core.Api 中)