.NET 上的 gRPC 支持的平台

作者:James Newton-King

本文讨论在 .NET 中使用 gRPC 的要求和支持的平台。 针对以下两个主要的 gRPC 工作负载,要求有所不同:

连网格式

gRPC 充分利用 HTTP/2 中提供的高级功能。 在任何位置都不支持 HTTP/2,但使用 HTTP/1.1 的第二种线路格式可用于 gRPC:

  • application/grpc - HTTP/2 上的 gRPC 是 gRPC 的常见使用方式。
  • application/grpc-web - gRPC-Web 修改 gRPC 协议,使其与 HTTP/1.1 兼容。 gRPC-Web 可在更多地方使用。 在不完全支持 HTTP/2 的浏览器应用和网络中均可使用 gRPC-Web。 不再支持两个高级 gRPC 功能:客户端流式处理和双向流式处理。

.NET 上的 gRPC 支持两种线路格式。 默认情况下使用 application/grpc。 必须在客户端和服务器上配置 gRPC-Web 才能成功调用 gRPC-Web。 有关设置 gRPC-Web 的信息,请参阅 ASP.NET Core gRPC 应用中的 gRPC-Web

ASP.NET Core gRPC 服务器要求

使用 ASP.NET Core 托管 gRPC 服务需要 .NET Core 3.x 或更高版本。

  • .NET 5 或更高版本
  • .NET Core 3

ASP.NET Core gRPC 服务可以托管在 .NET Core 支持的所有操作系统上。

  • Windows
  • Linux
  • macOS

支持的 ASP.NET Core 服务器

支持所有内置的 ASP.NET Core 服务器。

  • Kestrel
  • TestServer
  • IIS†
  • HTTP.sys†

†需要 .NET 5 和 Windows 11 内部版本 22000 或 Windows Server 2022 内部版本 20348 或更高版本。

有关配置 ASP.NET Core 服务器以运行 gRPC 的信息,请参阅使用 的 gRPC 服务

Azure 服务

†gRPC 需要在 Azure 应用服务上使用基于 Linux 的环境。 有关 Azure 应用服务部署信息,请参阅如何在应用服务上部署 .NET 6 gRPC 应用

.NET gRPC 客户端要求

Grpc.Net.Client 包支持在 .NET Core 3 以及 .NET 5 或更高版本上通过 HTTP/2 进行 gRPC 调用。

.NET Framework 上对 gRPC over HTTP/2 的支持有限。 其他 .NET 版本(例如 UWP、Xamarin 和 Unity)不具备所需的 HTTP/2 支持,必须改为使用 gRPC-Web。

下表列出了 .NET 实现及其 gRPC 客户端支持:

.NET 实现 gRPC over HTTP/2 gRPC-Web
.NET 5 或更高版本
.NET Core 3
.NET Core 2.1
.NET Framework 4.6.1 ⚠️†
Blazor WebAssembly
Mono 5.4
Xamarin.iOS 10.14
Xamarin.Android 8.0
通用 Windows 平台 10.0.16299
Unity 2018.1

†.NET Framework 需要配置 WinHttpHandler 和 Windows 11 或更高版本、Windows Server 2019 或更高版本。 有关详细信息,请参阅在 .NET Framework 上进行 gRPC 调用

要将 Grpc.Net.Client 与 gRPC-Web 一起使用,需要进行其他配置。 更多相关信息:

重要事项

gRPC-Web 要求客户端和服务器支持它。gRPC-Web 可由 ASP.NET Core gRPC 服务器快速配置。 其他 gRPC 服务器实现需要代理来支持 gRPC-Web。

其他资源