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

Is it possible to use gRPC with HTTP/1.1 in .NET Core?

我有两个网络服务 - gRPC 客户端和 gRPC 服务器。服务器是用 .NET Core 编写的,hence HTTP/2 for gRPC is enforced. Client however is a .NET Framework 4.7.2 web app hosted on IIS 8.5, so it only supports HTTP/1.1.

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

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

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

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

GrpcChannel.ForAddress(...)

使用 Microsoft 传输,并且

new Channel(...)

用Google运输。其余所有 API 都是共享的(在 Grpc.Core.Api)

没有。 RPC 调用仅在 HTTP/2 上完成。这允许 gRPC 用户自动利用协议的所有功能。

如果不需要客户端推流,可以使用gRPC-Web协议。以下是为此类服务启动客户端和服务器的方法。

https://docs.microsoft.com/en-us/aspnet/core/grpc/browser?view=aspnetcore-6.0

请记住,虽然它提到了 blazor,但这种方法可用于非 webassembly 客户端。

您尝试过使用 grpc-web? 我相信它有一个使用 http1.1 而不是 2.2 的解决方法。

有些事情需要注意,例如预告片和流媒体,它们的工作方式有点不同,因为 http1.1 支持这些功能。