チュートリアル: ASP.NET Core で gRPC のクライアントとサーバーを作成する
このチュートリアルでは、.NET Core gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法を紹介します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
前提条件
Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
gRPC サービスの作成
- Visual Studio 2022 を開始し、[新しいプロジェクト] を選択します。
- [新しいプロジェクトの作成] ダイアログで、
gRPC
を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。 - [新しいプロジェクトの構成] ダイアログで、 [プロジェクト名] に「
GrpcGreeter
」と入力します。 コードのコピーおよび貼り付けを行う際に名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付けることが重要です。 - [次へ] を選択します。
- [追加情報] ダイアログで、[.NET 8.0 (長期的なサポート)] を選択し、[作成] を選択します。
サービスを実行する
Ctrl + F5 キーを押して、デバッガーなしで実行します。
SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。
IIS Express SSL 証明書を信頼する場合、[はい] を選択します。
次のダイアログが表示されます。
開発証明書を信頼することに同意する場合は、 [はい] を選択します。
Firefox ブラウザーを信頼する方法の詳細については、「Firefox SEC_ERROR_INADEQUATE_KEY_USAGE 証明書エラー」を参照してください。
Visual Studio:
- Kestrel サーバーを起動します。
- ブラウザーを起動します。
http://localhost:port
(http://localhost:7042
など) に移動します。- port: ランダムに割り当てられた、アプリのポート番号。
localhost
: ローカル コンピューターの標準的なホスト名。 localhost では、ローカル コンピューターからの Web 要求のみが処理されます。
ログには、https://localhost:<port>
でリッスンしているサービスが表示されます。<port>
は、プロジェクトが作成されて Properties/launchSettings.json
に設定されたときに、ランダムに割り当てられるローカルホスト ポート番号です。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
gRPC テンプレートはトランスポート層セキュリティ (TLS) を使用するように構成されています。 gRPC クライアントでは、HTTPS を使用してサーバーを呼び出す必要があります。 gRPC サービス localhost ポート番号は、プロジェクトが作成されて gRPC サービス プロジェクトの Properties\launchSettings.json ファイルで設定されるときにランダムに割り当てられます。
プロジェクト ファイルを確認する
GrpcGreeterプロジェクト ファイル:
Protos/greet.proto
:Greeter
gRPC が定義されています。gRPC サーバー資産を生成するために使用されます。 詳細については、「gRPC の概要」を参照してください。Services
フォルダー:Greeter
サービスの実装が含まれています。appSettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。Program.cs
。以下が含まれています。- gRPC サービスのエントリ ポイント。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。
- アプリの動作を構成するコード。 詳細については、アプリの Startupに関するページを参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、[新しいプロジェクト] を選択します。
- [新しいプロジェクトの作成] ダイアログで、[コンソール アプリ] を選択し、[次へ] を選択します。
- [プロジェクト名] テキスト ボックスに「GrpcGreeterClient」を入力し、 [次へ] を選択します。
- [追加情報] ダイアログで、[.NET 8.0 (長期的なサポート)] を選択し、[作成] を選択します。
必要な NuGet パッケージの追加
gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。
- .NET Core のクライアントを含む Grpc.Net.Client。
- Google.Protobuf。これに C# の protobuf メッセージ API が含まれています。
- Grpc.Tools。これには protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。次のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- [ソリューション エクスプローラー]>[NuGet パッケージの管理] でプロジェクトを右クリックします。
- [参照] タブを選択します。
- 検索ボックスに「Grpc.Net.Client」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、 [インストール] を選択します。
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
greet.proto を追加する
gRPC クライアント プロジェクトで Protos フォルダーを作成します。
gRPC あいさつサービスから gRPC クライアント プロジェクトの Protos フォルダーに Protos\greet.proto ファイルをコピーします。
greet.proto
ファイル内の名前空間を、プロジェクトの名前空間に更新します。option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
プロジェクト ファイルを編集します。
プロジェクトを右クリックし、 [プロジェクト ファイルの編集] を選択します。
greet.proto ファイルを参照する
<Protobuf>
要素で項目グループを追加します。<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter クライアントを作成する
- クライアント プロジェクトをビルドして、
GrpcGreeterClient
名前空間内に型を作成します。
Note
GrpcGreeterClient
型は、ビルド プロセスによって自動的に生成されます。 ツール パッケージ Grpc.Tools は、greet.proto ファイルに基づいて次のファイルと生成します。
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: プロトコル バッファー コード。要求メッセージと応答メッセージの種類を、設定、シリアル化、および取得します。GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: 生成されたクライアント クラスを格納します。
Grpc.Tools によって自動的に生成される C# アセットの詳細については、「C# を使用した gRPC サービス」の「生成された C# アセット」を参照してください。
次のコードを使用して、gRPC クライアントの
Program.cs
ファイルを更新します。using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();
上記の強調表示されたコードでは、ローカルホスト ポート番号
7042
をGrpcGreeter
サービス プロジェクト内のProperties/launchSettings.json
で指定されたHTTPS
ポート番号に置き換えます。
Program.cs
には、gRPC クライアントのエントリ ポイントとロジックが含まれています。
Greeter クライアントは、次の方法で作成されます。
- gRPC サービスへの接続を作成するための情報が含まれている
GrpcChannel
をインスタンス化する。 GrpcChannel
を使用して、Greeter クライアントを構築します。
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Greeter クライアントから非同期の SayHello
メソッドが呼び出されます。 SayHello
呼び出しの結果が表示されます。
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
gRPC あいさつサービスで gRPC クライアントをテストする
次の強調表示された行を追加して、appsettings.Development.json
ファイルを更新します。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- あいさつサービスで、
Ctrl+F5
キーを押して、デバッガーなしでサーバーを起動します。 GrpcGreeterClient
プロジェクトで、Ctrl+F5
押してデバッガーなしでクライアントを起動します。
クライアントにより、その名前 GreeterClient が含まれるあいさつメッセージが、サービスに送信されます。 サービスから応答として "Hello GreeterClient" のメッセージが送信されます。 "Hello GreeterClient" の応答がコマンド プロンプトに表示されます。
Greeting: Hello GreeterClient
Press any key to exit...
gRPC サービスにより、成功した呼び出しの詳細が、コマンド プロンプトに書き込まれるログに記録されます。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
この記事のコードでは、gRPC サービスをセキュリティで保護するために、ASP.NET Core HTTPS 開発証明書が必要です。 .NET gRPC クライアントが The remote certificate is invalid according to the validation procedure.
または The SSL connection could not be established.
というメッセージで失敗する場合、その開発証明書は信頼されていません。 この問題を解決するには、「信頼されていないか無効な証明書で gRPC サービスを呼び出す」を参照してください。
次の手順
このチュートリアルでは、.NET Core gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法を紹介します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
前提条件
Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
gRPC サービスの作成
- Visual Studio 2022 を開始し、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、
gRPC
を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。 - [新しいプロジェクトの構成] ダイアログで、 [プロジェクト名] に「
GrpcGreeter
」と入力します。 コードのコピーおよび貼り付けを行う際に名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付けることが重要です。 - [次へ] を選択します。
- [追加情報] ダイアログで、[.NET 6.0 (長期的なサポート)] を選択し、[作成] を選択します。
サービスを実行する
Ctrl + F5 キーを押して、デバッガーなしで実行します。
SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。
IIS Express SSL 証明書を信頼する場合、[はい] を選択します。
次のダイアログが表示されます。
開発証明書を信頼することに同意する場合は、 [はい] を選択します。
Firefox ブラウザーを信頼する方法の詳細については、「Firefox SEC_ERROR_INADEQUATE_KEY_USAGE 証明書エラー」を参照してください。
Visual Studio:
- Kestrel サーバーを起動します。
- ブラウザーを起動します。
http://localhost:port
(http://localhost:7042
など) に移動します。- port: ランダムに割り当てられた、アプリのポート番号。
localhost
: ローカル コンピューターの標準的なホスト名。 localhost では、ローカル コンピューターからの Web 要求のみが処理されます。
ログには、https://localhost:<port>
でリッスンしているサービスが表示されます。<port>
は、プロジェクトが作成されて Properties/launchSettings.json
に設定されたときに、ランダムに割り当てられるローカルホスト ポート番号です。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
gRPC テンプレートはトランスポート層セキュリティ (TLS) を使用するように構成されています。 gRPC クライアントでは、HTTPS を使用してサーバーを呼び出す必要があります。 gRPC サービス localhost ポート番号は、プロジェクトが作成されて gRPC サービス プロジェクトの Properties\launchSettings.json ファイルで設定されるときにランダムに割り当てられます。
macOS の場合、ASP.NET Core gRPC と TLS の組み合わせに対応していません。 macOS で gRPC サービスを正常に実行するには、追加の構成が必要です。 詳細については、macOS で ASP.NET Core gRPC アプリを起動できない場合に関するページを参照してください。
プロジェクト ファイルを確認する
GrpcGreeterプロジェクト ファイル:
Protos/greet.proto
:Greeter
gRPC が定義されています。gRPC サーバー資産を生成するために使用されます。 詳細については、「gRPC の概要」を参照してください。Services
フォルダー:Greeter
サービスの実装が含まれています。appSettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。Program.cs
。以下が含まれています。- gRPC サービスのエントリ ポイント。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。
- アプリの動作を構成するコード。 詳細については、アプリの Startupに関するページを参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリケーション] を選択し、 [次へ] を選択します。
- [プロジェクト名] テキスト ボックスに「GrpcGreeterClient」を入力し、 [次へ] を選択します。
- [追加情報] ダイアログで、[.NET 6.0 (長期的なサポート)] を選択し、[作成] を選択します。
必要な NuGet パッケージの追加
gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。
- .NET Core のクライアントを含む Grpc.Net.Client。
- Google.Protobuf。これに C# の protobuf メッセージ API が含まれています。
- Grpc.Tools。これには protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。次のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- [ソリューション エクスプローラー]>[NuGet パッケージの管理] でプロジェクトを右クリックします。
- [参照] タブを選択します。
- 検索ボックスに「Grpc.Net.Client」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、 [インストール] を選択します。
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
greet.proto を追加する
gRPC クライアント プロジェクトで Protos フォルダーを作成します。
gRPC あいさつサービスから gRPC クライアント プロジェクトの Protos フォルダーに Protos\greet.proto ファイルをコピーします。
greet.proto
ファイル内の名前空間を、プロジェクトの名前空間に更新します。option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
プロジェクト ファイルを編集します。
プロジェクトを右クリックし、 [プロジェクト ファイルの編集] を選択します。
greet.proto ファイルを参照する
<Protobuf>
要素で項目グループを追加します。<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter クライアントを作成する
- クライアント プロジェクトをビルドして、
GrpcGreeterClient
名前空間内に型を作成します。
Note
GrpcGreeterClient
型は、ビルド プロセスによって自動的に生成されます。 ツール パッケージ Grpc.Tools は、greet.proto ファイルに基づいて次のファイルと生成します。
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: プロトコル バッファー コード。要求メッセージと応答メッセージの種類を、設定、シリアル化、および取得します。GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: 生成されたクライアント クラスを格納します。
Grpc.Tools によって自動的に生成される C# アセットの詳細については、「C# を使用した gRPC サービス」の「生成された C# アセット」を参照してください。
次のコードを使用して、gRPC クライアントの
Program.cs
ファイルを更新します。using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();
上記の強調表示されたコードでは、ローカルホスト ポート番号
7042
をGrpcGreeter
サービス プロジェクト内のProperties/launchSettings.json
で指定されたHTTPS
ポート番号に置き換えます。
Program.cs
には、gRPC クライアントのエントリ ポイントとロジックが含まれています。
Greeter クライアントは、次の方法で作成されます。
- gRPC サービスへの接続を作成するための情報が含まれている
GrpcChannel
をインスタンス化する。 GrpcChannel
を使用して、Greeter クライアントを構築します。
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Greeter クライアントから非同期の SayHello
メソッドが呼び出されます。 SayHello
呼び出しの結果が表示されます。
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
gRPC あいさつサービスで gRPC クライアントをテストする
次の強調表示された行を追加して、appsettings.Development.json
ファイルを更新します。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- あいさつサービスで、
Ctrl+F5
キーを押して、デバッガーなしでサーバーを起動します。 GrpcGreeterClient
プロジェクトで、Ctrl+F5
押してデバッガーなしでクライアントを起動します。
クライアントにより、その名前 GreeterClient が含まれるあいさつメッセージが、サービスに送信されます。 サービスから応答として "Hello GreeterClient" のメッセージが送信されます。 "Hello GreeterClient" の応答がコマンド プロンプトに表示されます。
Greeting: Hello GreeterClient
Press any key to exit...
gRPC サービスにより、成功した呼び出しの詳細が、コマンド プロンプトに書き込まれるログに記録されます。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
この記事のコードでは、gRPC サービスをセキュリティで保護するために、ASP.NET Core HTTPS 開発証明書が必要です。 .NET gRPC クライアントが The remote certificate is invalid according to the validation procedure.
または The SSL connection could not be established.
というメッセージで失敗する場合、その開発証明書は信頼されていません。 この問題を解決するには、「信頼されていないか無効な証明書で gRPC サービスを呼び出す」を参照してください。
次の手順
このチュートリアルでは、.NET Core gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法を紹介します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
前提条件
- Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
- .NET 6.0 SDK
gRPC サービスの作成
- Visual Studio 2022 を開始し、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、
gRPC
を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。 - [新しいプロジェクトの構成] ダイアログで、 [プロジェクト名] に「
GrpcGreeter
」と入力します。 コードのコピーおよび貼り付けを行う際に名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付けることが重要です。 - [次へ] を選択します。
- [追加情報] ダイアログで、[.NET 6.0 (長期的なサポート)] を選択し、[作成] を選択します。
サービスを実行する
Ctrl + F5 キーを押して、デバッガーなしで実行します。
SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。
IIS Express SSL 証明書を信頼する場合、[はい] を選択します。
次のダイアログが表示されます。
開発証明書を信頼することに同意する場合は、 [はい] を選択します。
Firefox ブラウザーを信頼する方法の詳細については、「Firefox SEC_ERROR_INADEQUATE_KEY_USAGE 証明書エラー」を参照してください。
Visual Studio:
- Kestrel サーバーを起動します。
- ブラウザーを起動します。
http://localhost:port
(http://localhost:7042
など) に移動します。- port: ランダムに割り当てられた、アプリのポート番号。
localhost
: ローカル コンピューターの標準的なホスト名。 localhost では、ローカル コンピューターからの Web 要求のみが処理されます。
ログには、https://localhost:<port>
でリッスンしているサービスが表示されます。<port>
は、プロジェクトが作成されて Properties/launchSettings.json
に設定されたときに、ランダムに割り当てられるローカルホスト ポート番号です。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
gRPC テンプレートはトランスポート層セキュリティ (TLS) を使用するように構成されています。 gRPC クライアントでは、HTTPS を使用してサーバーを呼び出す必要があります。 gRPC サービス localhost ポート番号は、プロジェクトが作成されて gRPC サービス プロジェクトの Properties\launchSettings.json ファイルで設定されるときにランダムに割り当てられます。
macOS の場合、ASP.NET Core gRPC と TLS の組み合わせに対応していません。 macOS で gRPC サービスを正常に実行するには、追加の構成が必要です。 詳細については、macOS で ASP.NET Core gRPC アプリを起動できない場合に関するページを参照してください。
プロジェクト ファイルを確認する
GrpcGreeterプロジェクト ファイル:
Protos/greet.proto
:Greeter
gRPC が定義されています。gRPC サーバー資産を生成するために使用されます。 詳細については、「gRPC の概要」を参照してください。Services
フォルダー:Greeter
サービスの実装が含まれています。appSettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。Program.cs
。以下が含まれています。- gRPC サービスのエントリ ポイント。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。
- アプリの動作を構成するコード。 詳細については、アプリの Startupに関するページを参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリケーション] を選択し、 [次へ] を選択します。
- [プロジェクト名] テキスト ボックスに「GrpcGreeterClient」を入力し、 [次へ] を選択します。
- [追加情報] ダイアログで、[.NET 6.0 (長期的なサポート)] を選択し、[作成] を選択します。
必要な NuGet パッケージの追加
gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。
- .NET Core のクライアントを含む Grpc.Net.Client。
- Google.Protobuf。これに C# の protobuf メッセージ API が含まれています。
- Grpc.Tools。これには protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。次のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- [ソリューション エクスプローラー]>[NuGet パッケージの管理] でプロジェクトを右クリックします。
- [参照] タブを選択します。
- 検索ボックスに「Grpc.Net.Client」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、 [インストール] を選択します。
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
greet.proto を追加する
gRPC クライアント プロジェクトで Protos フォルダーを作成します。
gRPC あいさつサービスから gRPC クライアント プロジェクトの Protos フォルダーに Protos\greet.proto ファイルをコピーします。
greet.proto
ファイル内の名前空間を、プロジェクトの名前空間に更新します。option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
プロジェクト ファイルを編集します。
プロジェクトを右クリックし、 [プロジェクト ファイルの編集] を選択します。
greet.proto ファイルを参照する
<Protobuf>
要素で項目グループを追加します。<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter クライアントを作成する
- クライアント プロジェクトをビルドして、
GrpcGreeterClient
名前空間内に型を作成します。
Note
GrpcGreeterClient
型は、ビルド プロセスによって自動的に生成されます。 ツール パッケージ Grpc.Tools は、greet.proto ファイルに基づいて次のファイルと生成します。
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: プロトコル バッファー コード。要求メッセージと応答メッセージの種類を、設定、シリアル化、および取得します。GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: 生成されたクライアント クラスを格納します。
Grpc.Tools によって自動的に生成される C# アセットの詳細については、「C# を使用した gRPC サービス」の「生成された C# アセット」を参照してください。
次のコードを使用して、gRPC クライアントの
Program.cs
ファイルを更新します。using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();
上記の強調表示されたコードでは、ローカルホスト ポート番号
7042
をGrpcGreeter
サービス プロジェクト内のProperties/launchSettings.json
で指定されたHTTPS
ポート番号に置き換えます。
Program.cs
には、gRPC クライアントのエントリ ポイントとロジックが含まれています。
Greeter クライアントは、次の方法で作成されます。
- gRPC サービスへの接続を作成するための情報が含まれている
GrpcChannel
をインスタンス化する。 GrpcChannel
を使用して、Greeter クライアントを構築します。
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Greeter クライアントから非同期の SayHello
メソッドが呼び出されます。 SayHello
呼び出しの結果が表示されます。
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
gRPC あいさつサービスで gRPC クライアントをテストする
- あいさつサービスで、
Ctrl+F5
キーを押して、デバッガーなしでサーバーを起動します。 GrpcGreeterClient
プロジェクトで、Ctrl+F5
押してデバッガーなしでクライアントを起動します。
クライアントにより、その名前 GreeterClient が含まれるあいさつメッセージが、サービスに送信されます。 サービスから応答として "Hello GreeterClient" のメッセージが送信されます。 "Hello GreeterClient" の応答がコマンド プロンプトに表示されます。
Greeting: Hello GreeterClient
Press any key to exit...
gRPC サービスにより、成功した呼び出しの詳細が、コマンド プロンプトに書き込まれるログに記録されます。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
次の行を追加して、appsettings.Development.json
ファイルを更新します。
"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
Note
この記事のコードでは、gRPC サービスをセキュリティで保護するために、ASP.NET Core HTTPS 開発証明書が必要です。 .NET gRPC クライアントが The remote certificate is invalid according to the validation procedure.
または The SSL connection could not be established.
というメッセージで失敗する場合、その開発証明書は信頼されていません。 この問題を解決するには、「信頼されていないか無効な証明書で gRPC サービスを呼び出す」を参照してください。
次の手順
このチュートリアルでは、.NET Core gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法を紹介します。
最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
前提条件
- ASP.NET および Web 開発ワークロードを含む Visual Studio 2019 16.8 以降
- .NET 5.0 SDK
gRPC サービスの作成
- Visual Studio を開始し、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [gRPC サービス] を選び、 [次へ] を選択します。
- [新しいプロジェクトの構成] ダイアログで、 [プロジェクト名] に「
GrpcGreeter
」と入力します。 コードのコピーおよび貼り付けを行う際に名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付けることが重要です。 - [次へ] を選択します。
- [追加情報] ダイアログで、 [ターゲット フレームワーク] ドロップダウンの [.NET 5.0] を選択します。
- [作成] を選択します。
サービスを実行する
Ctrl + F5 キーを押して、デバッガーなしで実行します。
SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。
IIS Express SSL 証明書を信頼する場合、[はい] を選択します。
次のダイアログが表示されます。
開発証明書を信頼することに同意する場合は、 [はい] を選択します。
Firefox ブラウザーを信頼する方法の詳細については、「Firefox SEC_ERROR_INADEQUATE_KEY_USAGE 証明書エラー」を参照してください。
Visual Studio で IIS Express が開始され、アプリが実行されます。 アドレス バーには、
example.com
などではなく、localhost:port#
が表示されます。 これは、localhost
がローカル コンピューターの標準のホスト名であるためです。 localhost では、ローカル コンピューターからの Web 要求のみが処理されます。 Visual Studio が Web プロジェクトを作成する場合は、Web サーバーにランダム ポートが使用されます。
サービスが https://localhost:5001
でリッスンしていることがログに示されます。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
gRPC テンプレートはトランスポート層セキュリティ (TLS) を使用するように構成されています。 gRPC クライアントでは、HTTPS を使用してサーバーを呼び出す必要があります。
macOS の場合、ASP.NET Core gRPC と TLS の組み合わせに対応していません。 macOS で gRPC サービスを正常に実行するには、追加の構成が必要です。 詳細については、macOS で ASP.NET Core gRPC アプリを起動できない場合に関するページを参照してください。
プロジェクト ファイルを確認する
GrpcGreeterプロジェクト ファイル:
- greet.proto:Protos/greet.proto ファイルは、
Greeter
gRPC を定義し、gRPC サーバー資産を生成するために使用されます。 詳細については、「gRPC の概要」を参照してください。 - Services フォルダー:
Greeter
サービスの実装が含まれます。 appsettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。Program.cs
: gRPC サービスのエントリ ポイントが含まれています。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。Startup.cs
: アプリの動作を構成するコードが含まれています。 詳細については、アプリの Startupに関するページを参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリ (.NET Core)] を選択し、 [次へ] を選択します。
- [プロジェクト名] テキスト ボックスに「GrpcGreeterClient」を入力し、 [作成] を選択します。
必要なパッケージを追加する
gRPC クライアント プロジェクトには、次のパッケージが必要です。
- .NET Core のクライアントを含む Grpc.Net.Client。
- Google.Protobuf。これに C# の protobuf メッセージ API が含まれています。
- Grpc.Tools。これには protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。次のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- [ソリューション エクスプローラー]>[NuGet パッケージの管理] でプロジェクトを右クリックします。
- [参照] タブを選択します。
- 検索ボックスに「Grpc.Net.Client」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、 [インストール] を選択します。
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
greet.proto を追加する
gRPC クライアント プロジェクトで Protos フォルダーを作成します。
gRPC あいさつサービスから gRPC クライアント プロジェクトの Protos フォルダーに Protos\greet.proto ファイルをコピーします。
greet.proto
ファイル内の名前空間を、プロジェクトの名前空間に更新します。option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
プロジェクト ファイルを編集します。プロジェクトを右クリックし、 [プロジェクト ファイルの編集] を選択します。
greet.proto ファイルを参照する
<Protobuf>
要素で項目グループを追加します。<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter クライアントを作成する
- クライアント プロジェクトをビルドして、
GrpcGreeterClient
名前空間内に型を作成します。
Note
GrpcGreeterClient
型は、ビルド プロセスによって自動的に生成されます。 ツール パッケージ Grpc.Tools は、greet.proto ファイルに基づいて次のファイルと生成します。
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: プロトコル バッファー コード。要求メッセージと応答メッセージの種類を、設定、シリアル化、および取得します。GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: 生成されたクライアント クラスを格納します。
Grpc.Tools によって自動的に生成される C# アセットの詳細については、「C# を使用した gRPC サービス」の「生成された C# アセット」を参照してください。
次のコードを使用して、gRPC クライアントの
Program.cs
ファイルを更新します。using System; using System.Net.Http; using System.Threading.Tasks; using Grpc.Net.Client; namespace GrpcGreeterClient { class Program { static async Task Main(string[] args) { // The port number(5001) must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } }
Program.cs
には、gRPC クライアントのエントリ ポイントとロジックが含まれています。
Greeter クライアントは、次の方法で作成されます。
- gRPC サービスへの接続を作成するための情報が含まれている
GrpcChannel
をインスタンス化する。 GrpcChannel
を使用して、Greeter クライアントを構築します。
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
Greeter クライアントから非同期の SayHello
メソッドが呼び出されます。 SayHello
呼び出しの結果が表示されます。
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
gRPC あいさつサービスで gRPC クライアントをテストする
- あいさつサービスで、
Ctrl+F5
キーを押して、デバッガーなしでサーバーを起動します。 GrpcGreeterClient
プロジェクトで、Ctrl+F5
押してデバッガーなしでクライアントを起動します。
クライアントにより、その名前 GreeterClient が含まれるあいさつメッセージが、サービスに送信されます。 サービスから応答として "Hello GreeterClient" のメッセージが送信されます。 "Hello GreeterClient" の応答がコマンド プロンプトに表示されます。
Greeting: Hello GreeterClient
Press any key to exit...
gRPC サービスにより、成功した呼び出しの詳細が、コマンド プロンプトに書き込まれるログに記録されます。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
この記事のコードでは、gRPC サービスをセキュリティで保護するために、ASP.NET Core HTTPS 開発証明書が必要です。 .NET gRPC クライアントが The remote certificate is invalid according to the validation procedure.
または The SSL connection could not be established.
というメッセージで失敗する場合、その開発証明書は信頼されていません。 この問題を解決するには、「信頼されていないか無効な証明書で gRPC サービスを呼び出す」を参照してください。
次の手順
このチュートリアルでは、.NET Core gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法を紹介します。
最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
前提条件
- ASP.NET および Web 開発ワークロードを含む Visual Studio 2019 16.4 以降
- .NET Core 3.1 SDK
gRPC サービスの作成
Visual Studio を開始し、 [新しいプロジェクトの作成] を選択します。 または、Visual Studio の [ファイル] メニューから、 [新規作成]>[プロジェクト] の順に選択します。
[新しいプロジェクトの作成] ダイアログで、 [gRPC サービス] を選択して、 [次へ] を選択します。
プロジェクトに GrpcGreeter という名前を付けます。 コードのコピーおよび貼り付けを行う際に名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付けることが重要です。
[作成] を選択します。
[Create a new gRPC service](新しい gPRC サービスの作成) ダイアログで、次のようにします。
- gRPC サービス テンプレートが選択されています。
- [作成] を選択します。
サービスを実行する
Ctrl + F5 キーを押して、デバッガーなしで実行します。
SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。
IIS Express SSL 証明書を信頼する場合、[はい] を選択します。
次のダイアログが表示されます。
開発証明書を信頼することに同意する場合は、 [はい] を選択します。
Firefox ブラウザーを信頼する方法の詳細については、「Firefox SEC_ERROR_INADEQUATE_KEY_USAGE 証明書エラー」を参照してください。
Visual Studio で IIS Express が開始され、アプリが実行されます。 アドレス バーには、
example.com
などではなく、localhost:port#
が表示されます。 これは、localhost
がローカル コンピューターの標準のホスト名であるためです。 localhost では、ローカル コンピューターからの Web 要求のみが処理されます。 Visual Studio が Web プロジェクトを作成する場合は、Web サーバーにランダム ポートが使用されます。
サービスが https://localhost:5001
でリッスンしていることがログに示されます。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
gRPC テンプレートはトランスポート層セキュリティ (TLS) を使用するように構成されています。 gRPC クライアントでは、HTTPS を使用してサーバーを呼び出す必要があります。
macOS の場合、ASP.NET Core gRPC と TLS の組み合わせに対応していません。 macOS で gRPC サービスを正常に実行するには、追加の構成が必要です。 詳細については、macOS で ASP.NET Core gRPC アプリを起動できない場合に関するページを参照してください。
プロジェクト ファイルを確認する
GrpcGreeterプロジェクト ファイル:
- greet.proto:Protos/greet.proto ファイルは、
Greeter
gRPC を定義し、gRPC サーバー資産を生成するために使用されます。 詳細については、「gRPC の概要」を参照してください。 - Services フォルダー:
Greeter
サービスの実装が含まれます。 appsettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。Program.cs
: gRPC サービスのエントリ ポイントが含まれています。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。Startup.cs
: アプリの動作を構成するコードが含まれています。 詳細については、アプリの Startupに関するページを参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリ (.NET Core)] を選択し、 [次へ] を選択します。
- [プロジェクト名] テキスト ボックスに「GrpcGreeterClient」を入力し、 [作成] を選択します。
必要なパッケージを追加する
gRPC クライアント プロジェクトには、次のパッケージが必要です。
- .NET Core のクライアントを含む Grpc.Net.Client。
- Google.Protobuf。これに C# の protobuf メッセージ API が含まれています。
- Grpc.Tools。これには protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。次のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- [ソリューション エクスプローラー]>[NuGet パッケージの管理] でプロジェクトを右クリックします。
- [参照] タブを選択します。
- 検索ボックスに「Grpc.Net.Client」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、 [インストール] を選択します。
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
greet.proto を追加する
gRPC クライアント プロジェクトで Protos フォルダーを作成します。
gRPC あいさつサービスから gRPC クライアント プロジェクトの Protos フォルダーに Protos\greet.proto ファイルをコピーします。
greet.proto
ファイル内の名前空間を、プロジェクトの名前空間に更新します。option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
プロジェクト ファイルを編集します。プロジェクトを右クリックし、 [プロジェクト ファイルの編集] を選択します。
greet.proto ファイルを参照する
<Protobuf>
要素で項目グループを追加します。<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter クライアントを作成する
- クライアント プロジェクトをビルドして、
GrpcGreeterClient
名前空間内に型を作成します。
Note
GrpcGreeterClient
型は、ビルド プロセスによって自動的に生成されます。 ツール パッケージ Grpc.Tools は、greet.proto ファイルに基づいて次のファイルと生成します。
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: プロトコル バッファー コード。要求メッセージと応答メッセージの種類を、設定、シリアル化、および取得します。GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: 生成されたクライアント クラスを格納します。
Grpc.Tools によって自動的に生成される C# アセットの詳細については、「C# を使用した gRPC サービス」の「生成された C# アセット」を参照してください。
次のコードを使用して、gRPC クライアントの Program.cs
ファイルを更新します。
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;
namespace GrpcGreeterClient
{
class Program
{
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
Program.cs
には、gRPC クライアントのエントリ ポイントとロジックが含まれています。
Greeter クライアントは、次の方法で作成されます。
- gRPC サービスへの接続を作成するための情報が含まれている
GrpcChannel
をインスタンス化する。 GrpcChannel
を使用して、Greeter クライアントを構築します。
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
Greeter クライアントから非同期の SayHello
メソッドが呼び出されます。 SayHello
呼び出しの結果が表示されます。
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
gRPC あいさつサービスで gRPC クライアントをテストする
- あいさつサービスで、
Ctrl+F5
キーを押して、デバッガーなしでサーバーを起動します。 GrpcGreeterClient
プロジェクトで、Ctrl+F5
押してデバッガーなしでクライアントを起動します。
クライアントにより、その名前 GreeterClient が含まれるあいさつメッセージが、サービスに送信されます。 サービスから応答として "Hello GreeterClient" のメッセージが送信されます。 "Hello GreeterClient" の応答がコマンド プロンプトに表示されます。
Greeting: Hello GreeterClient
Press any key to exit...
gRPC サービスにより、成功した呼び出しの詳細が、コマンド プロンプトに書き込まれるログに記録されます。
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
この記事のコードでは、gRPC サービスをセキュリティで保護するために、ASP.NET Core HTTPS 開発証明書が必要です。 .NET gRPC クライアントが The remote certificate is invalid according to the validation procedure.
または The SSL connection could not be established.
というメッセージで失敗する場合、その開発証明書は信頼されていません。 この問題を解決するには、「信頼されていないか無効な証明書で gRPC サービスを呼び出す」を参照してください。
次の手順
ASP.NET Core