.NET Standard 2.0 での gRPC クライアントの使用
Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
作成者: 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
- Xamarin.iOS 10.14
- Xamarin.Android 8.0
- ユニバーサル 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、Xamarin、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 以降のリファレンス。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# コアライブラリ
.NET Framework と Xamarin 向けの代替オプションは、gRPC C# コアライブラリを使用して、gRPC 呼び出しを行うことでした。 gRPC C# コアライブラリは次のようになります。
- .NET Framework と Xamarin で HTTP/2 を経由した gRPC の呼び出しをサポートしているサードパーティのライブラリです。
- Microsoft のサポート対象外です。
- メンテナンス モードになっていて非推奨となります。.NET 用 gRPC が優先されます。
- 新しいアプリにはお勧めしません。
その他の技術情報
ASP.NET Core