次の方法で共有


.NET Standard 2.0 での gRPC クライアントの使用

Note

これは、この記事の最新バージョンではありません。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

警告

このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

作成者: James Newton-King

この記事では、.NET Standard 2.0 をサポートする .NET 実装で .NET gRPC クライアントを使用する方法について説明します。

.NET 実装

次の .NET 実装 (またはそれ以降) では Grpc.Net.Client をサポートしていますが、HTTP/2 の完全サポートは提供していません。

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • ユニバーサル Windows プラットフォーム 10.0.16299
  • Unity 2018.1

.NET gRPC クライアントでは、追加の構成を使用して、これらの .NET 実装からサービスを呼び出すことができます。

HttpHandler の構成

HTTP プロバイダーは GrpcChannelOptions.HttpHandler を使用して構成する必要があります。 ハンドラーが構成されていない場合、エラーがスローされます。

System.PlatformNotSupportedException: gRPC over HTTP/2 をサポートしていない .NET 実装で RPC 呼び出しを正常に行うには、gRPC に追加の構成が必要です。 HTTP プロバイダーは GrpcChannelOptions.HttpHandler を使用して指定する必要があります。 構成した HTTP プロバイダーでは、HTTP/2 をサポートするか、gRPC-Web を使用するように構成する必要があります。

UWP や Unity など、HTTP/2 をサポートしていない .NET 実装では、代わりに 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 サーバー実装では、gRPC-Web をサポートするためにプロキシが必要です。

.NET Framework

.NET Framework では gRPC over HTTP/2 を制限付きでサポートしています。 .NET Framework で gRPC over HTTP/2 を有効にするには、WinHttpHandler を使用するようにチャネルを構成してください。

WinHttpHandler を使用するための要件と制限事項を以下に示します。

  • Windows 11 以降、Windows Server 2019 以降。
    • gRPC クライアントは、Windows 11 以降で完全にサポートされています。
    • gRPC クライアントは、Windows Server 2019 と Windows Server 2022 で部分的にサポートされています。 単項およびサーバー ストリーミング方法がサポートされています。 クライアントと双方向ストリーミングのメソッドはサポートされていません
  • System.Net.Http.WinHttpHandler バージョン 6.0.1 以降のリファレンス。
  • WinHttpHandler を使ってチャネルで GrpcChannelOptions.HttpHandler を構成します。
  • .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" });

Note

.NET Framework の gRPC クライアントは、最新の .NET バージョンよりも低速です。 gRPC のパフォーマンスを向上させるには、最新の .NET を使用するようにアプリを更新する必要があります。

gRPC C# コアライブラリ

.NET Framework の代替オプションとして、gRPC c# コア ライブラリ を使用して gRPC 呼び出しを行う方法があります。 gRPC C# コアライブラリは次のようになります。

  • .NET Framework での HTTP/2 経由での gRPC 呼び出しの実行をサポートするサード パーティ製ライブラリ。
  • Microsoft のサポート対象外です。
  • メンテナンス モードになっていて非推奨となります。.NET 用 gRPC が優先されます。
  • 新しいアプリにはお勧めしません。

その他の技術情報