共用方式為


搭配 .NET Standard 2.0 使用 gRPC 用戶端

注意

這不是這篇文章的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。

警告

不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。

重要

這些發行前產品的相關資訊在產品正式發行前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

如需目前的版本,請參閱 本文的 .NET 9 版本。

作者:James Newton-King

本文討論如何使用 .NET gRPC 用戶端搭配支援 .NET Standard 2.0 的 .NET 實作。

.NET 實作

下列 .NET 實作 (或更新版本) 支援 Grpc.Net.Client,但無法完整支援 HTTP/2:

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • 通用 Windows 平台 10.0.16299
  • Unity 2018.1

.NET gRPC 用戶端可以使用一些其他的組態,從這些 .NET 實作呼叫服務。

HttpHandler 組態

必須使用 GrpcChannelOptions.HttpHandler 來設定 HTTP 提供者。 如果未設定處理常式,則會擲回錯誤:

System.PlatformNotSupportedException:gRPC 需要額外的設定,才能在不支援透過 HTTP/2 的 gRPC 的 .NET 實作上成功進行 RPC 呼叫。 必須使用 GrpcChannelOptions.HttpHandler 指定 HTTP 提供者。 設定的 HTTP 提供者必須支援 HTTP/2,或設定為使用 gRPC-Web。

不支援 HTTP/2 的 .NET 實作,例如 UWP、Xamarin 和 Unity,可以使用 gRPC-Web 做為替代方案。

var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new GrpcWebHandler(new HttpClientHandler())
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

也可以使用 gRPC 用戶端處理站 來建立用戶端。 HTTP 提供者是使用 ConfigurePrimaryHttpMessageHandler 擴充方法來設定。

builder.Services
    .AddGrpcClient<Greet.GreeterClient>(options =>
    {
        options.Address = new Uri("https://localhost:5001");
    })
    .ConfigurePrimaryHttpMessageHandler(
        () => new GrpcWebHandler(new HttpClientHandler()));

如需詳細資訊,請參閱使用 .NET gRPC 用戶端設定 gRPC-Web

重要

gRPC-Web 需要用戶端 伺服器才能支援它。gRPC-Web 可由 ASP.NET Core gRPC 伺服器快速設定。 其他 gRPC 伺服器實作需要 Proxy 才能支援 gRPC-Web。

.NET Framework

.NET Framework 對透過 HTTP/2 的 gRPC 的支援有限。 若要在 .NET Framework 上啟用透過 HTTP/2 的 gRPC,請將通道設定為使用 WinHttpHandler

使用 WinHttpHandler 的需求和限制:

  • Windows 11 或更新版本、Windows Server 2019 或更新版本。
    • Windows 11 或更新版本完全支援 gRPC 用戶端。
    • Windows 伺服器 2019 和 Windows 伺服器 2022 部分支援 gRPC 用戶端。 支援一元和伺服器串流方法。 支援用戶端和雙向串流方法。
  • System.Net.Http.WinHttpHandler 6.0.1 版或更新版本的參考。
  • 使用 GrpcChannelOptions.HttpHandler 在通道上設定 WinHttpHandler
  • .NET Framework 4.6.1 或更新版本。
  • 僅支援透過 TLS 進行 gRPC 呼叫。
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new WinHttpHandler()
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

gRPC C# core-library

.NET Framework 和 Xamarin 的替代選項是使用 gRPC C# core-library 進行 gRPC 呼叫。 gRPC C# core-library 為:

  • 支援在 .NET Framework 和 Xamarin 上透過 HTTP/2 進行 gRPC 呼叫的第三方程式庫。
  • Microsoft 不支援。
  • 處於維護模式,並將取代為 .NET 的 gRPC
  • 不建議用於新的應用程式。

其他資源