.NET の gRPC の概要
Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
作成者: James Newton-King
gRPC は言語に依存しない高性能なリモート プロシージャ コール (RPC) フレームワークです。
gRPC の主な利点:
- 最新の高性能軽量 RPC フレームワーク。
- 既定でプロトコル バッファーを使用する契約優先の API 開発。言語に依存しない実装を可能にします。
- 厳密に型指定されたサーバーとクライアントを生成する目的で、さまざまな言語で利用できるツール。
- クライアント、サーバー、双方向ストリーミング呼び出しをサポートします。
- Protobuf バイナリ シリアル化でネットワークの使用率を減らします。
以上の利点から gRPC は以下に最適です。
- 効率性が重要となる軽量のマイクロサービス。
- 開発に複数の言語が必要になる多言語システム。
- ストリーミングの要求または応答を処理する必要があるポイントツーポイントのリアルタイム サービス。
.proto
ファイルに対する C# のツールのサポート
gRPC では、API 開発に対してコントラクト優先のアプローチが使われます。 サービスとメッセージは、.proto
ファイルで定義されています。
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
サービス、クライアント、メッセージの .NET 型は、プロジェクトに .proto
ファイルを含めることで自動的に生成されます。
- Grpc.Tools パッケージにパッケージ参照を追加します。
<Protobuf>
項目グループに.proto
ファイルを追加します。
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
gRPC ツール サポートについて詳しくは、「C# を使用した gRPC サービス」を参照してください。
ASP.NET Core での gRPC サービス
gRPC サービスは ASP.NET Core でホストできます。 サービスは、ログ、依存関係の注入 (DI)、認証、認可などの ASP.NET Core 機能と完全に統合されています。
ASP.NET Core アプリに gRPC サービスを追加する
gRPC には Grpc. AspNetCore パッケージが必要です。 .NET アプリでの gRPC の構成の詳細については、「gRPC を構成する」を参照してください。
gRPC サービス プロジェクト テンプレート
ASP.NET Core gRPC サービスのプロジェクト テンプレートには、スターター サービスが用意されています。
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
は GreeterBase
型を継承します。これは、.proto
ファイルの Greeter
サービスから生成されます。 サービスは、Program.cs
内でクライアントがアクセスできるようになります。
app.MapGrpcService<GreeterService>();
ASP.NET Core での gRPC サービスについて詳しくは、「ASP.NET Core を使用した gRPC サービス」を参照してください。
.NET クライアントを使用して gRPC サービスを呼び出す
gRPC クライアントは、.proto
ファイルから生成される具象クライアント型です。 具象 gRPC クライアントには、.proto
ファイル内の gRPC サービスに変換するためのメソッドが含まれます。
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
gRPC クライアントはチャネルを使って作成され、これは gRPC サービスへの長期接続を表します。 チャネルは GrpcChannel.ForAddress
を使って作成できます。
クライアントの作成と、さまざまなサービス メソッドの呼び出しについて詳しくは、「.NET クライアントを使用して gRPC サービスを呼び出す」を参照してください。
その他のリソース
gRPC は言語に依存しない高性能なリモート プロシージャ コール (RPC) フレームワークです。
gRPC の主な利点:
- 最新の高性能軽量 RPC フレームワーク。
- 既定でプロトコル バッファーを使用する契約優先の API 開発。言語に依存しない実装を可能にします。
- 厳密に型指定されたサーバーとクライアントを生成する目的で、さまざまな言語で利用できるツール。
- クライアント、サーバー、双方向ストリーミング呼び出しをサポートします。
- Protobuf バイナリ シリアル化でネットワークの使用率を減らします。
以上の利点から gRPC は以下に最適です。
- 効率性が重要となる軽量のマイクロサービス。
- 開発に複数の言語が必要になる多言語システム。
- ストリーミングの要求または応答を処理する必要があるポイントツーポイントのリアルタイム サービス。
.proto
ファイルに対する C# のツールのサポート
gRPC では、API 開発に対してコントラクト優先のアプローチが使われます。 サービスとメッセージは、.proto
ファイルで定義されています。
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
サービス、クライアント、メッセージの .NET 型は、プロジェクトに .proto
ファイルを含めることで自動的に生成されます。
- Grpc.Tools パッケージにパッケージ参照を追加します。
<Protobuf>
項目グループに.proto
ファイルを追加します。
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
gRPC ツール サポートについて詳しくは、「C# を使用した gRPC サービス」を参照してください。
ASP.NET Core での gRPC サービス
gRPC サービスは ASP.NET Core でホストできます。 サービスは、ログ、依存関係の注入 (DI)、認証、認可などの ASP.NET Core 機能と完全に統合されています。
ASP.NET Core アプリに gRPC サービスを追加する
gRPC には Grpc. AspNetCore パッケージが必要です。 .NET アプリでの gRPC の構成の詳細については、「gRPC を構成する」を参照してください。
gRPC サービス プロジェクト テンプレート
gRPC サービスのプロジェクト テンプレートには、スターター サービスが用意されています。
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
は GreeterBase
型を継承します。これは、.proto
ファイルの Greeter
サービスから生成されます。 サービスは、Startup.cs
内でクライアントがアクセスできるようになります。
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
ASP.NET Core での gRPC サービスについて詳しくは、「ASP.NET Core を使用した gRPC サービス」を参照してください。
.NET クライアントを使用して gRPC サービスを呼び出す
gRPC クライアントは、.proto
ファイルから生成される具象クライアント型です。 具象 gRPC クライアントには、.proto
ファイル内の gRPC サービスに変換するためのメソッドが含まれます。
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
gRPC クライアントはチャネルを使って作成され、これは gRPC サービスへの長期接続を表します。 チャネルは GrpcChannel.ForAddress
を使って作成できます。
クライアントの作成と、さまざまなサービス メソッドの呼び出しについて詳しくは、「.NET クライアントを使用して gRPC サービスを呼び出す」を参照してください。
その他のリソース
ASP.NET Core