このチュートリアルでは、.NET gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法について説明します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
Prerequisites
Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
gRPC サービスの作成
- Visual Studio 2022 を起動し、[ 新しいプロジェクト] を選択します。
-
[新しいプロジェクトの作成] ダイアログで、
gRPC
を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。 -
[新しいプロジェクトの構成] ダイアログで、
GrpcGreeter
に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。 - Select Next.
- [追加情報] ダイアログで、[.NET 9.0 (Standard Term Support)] を選択し、[の作成]選択します。
サービスを実行する
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 サービス プロジェクトのファイル の [プロパティ]\launchSettings.jsで 設定されます。
プロジェクト ファイルを確認する
GrpcGreeter プロジェクト ファイル:
-
Protos/greet.proto
:Greeter
gRPC が定義されています。gRPC サーバー資産を生成するために使用されます。 詳細については、「gRPC の概要」を参照してください。 -
Services
フォルダー:Greeter
サービスの実装が含まれています。 -
appSettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。 -
Program.cs
、以下が含まれています。- gRPC サービスのエントリ ポイント。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。
- アプリの動作を構成するコード。 詳細については、「 アプリの起動」を参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio の 2 番目のインスタンスを開き、[ 新しいプロジェクト] を選択します。
- [新しいプロジェクトを作成] ダイアログで、[コンソール アプリ] を選択し、[次へ] を選択します。
- [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
- [追加情報] ダイアログで、[.NET 9.0 (Standard Term Support)] を選択し、[の作成]選択します。
必要な NuGet パッケージの追加
gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。
- .NET クライアントを含む Grpc.Net.Client。
- Google.Protobuf。C# の protobuf メッセージ API が含まれています。
-
Grpc.Tools。protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で、ツール>NuGet パッケージ マネージャー>Package Manager コンソールを選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。以下のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- ソリューション エクスプローラーでプロジェクトを右クリックします>Manage NuGet パッケージ。
- 「Browse」タブを選択します。
- 検索ボックスに 「Grpc.Net.Client 」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、[インストール] を選択します。
-
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
Add greet.proto
gRPC クライアント プロジェクトに Protos フォルダーを作成します。
gRPC Greeter サービスから 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 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
をHTTPS
サービス プロジェクト内のProperties/launchSettings.json
で指定されたGrpcGreeter
ポート番号に置き換えます。
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"
}
}
}
-
GrpcGreeter
サービス プロジェクトで、Ctrl+F5
キーを押して、デバッガーなしでサーバーを起動します。 -
GrpcGreeterClient
コンソール プロジェクトで、Ctrl+F5
を押して、デバッガーなしでクライアントを起動します。
クライアントは、 GreetingerClient という名前を含むメッセージを含む応答メッセージをサービスに送信します。 サービスから応答として "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 HTTP/2 POST https://localhost:7042/greet.Greeter/SayHello - 200 - application/grpc 40.4615ms
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 サービスを呼び出す」を参照してください。
Next steps
このチュートリアルでは、.NET gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法について説明します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
Prerequisites
Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
gRPC サービスの作成
- Visual Studio 2022 を起動し、[ 新しいプロジェクト] を選択します。
-
[新しいプロジェクトの作成] ダイアログで、
gRPC
を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。 -
[新しいプロジェクトの構成] ダイアログで、
GrpcGreeter
に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。 - Select Next.
- [ 追加情報 ] ダイアログで、[ .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 サービス プロジェクトのファイル の [プロパティ]\launchSettings.jsで 設定されます。
プロジェクト ファイルを確認する
GrpcGreeter プロジェクト ファイル:
-
Protos/greet.proto
:Greeter
gRPC が定義されています。gRPC サーバー資産を生成するために使用されます。 詳細については、「gRPC の概要」を参照してください。 -
Services
フォルダー:Greeter
サービスの実装が含まれています。 -
appSettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。 -
Program.cs
、以下が含まれています。- gRPC サービスのエントリ ポイント。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。
- アプリの動作を構成するコード。 詳細については、「 アプリの起動」を参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio の 2 番目のインスタンスを開き、[ 新しいプロジェクト] を選択します。
- [新しいプロジェクトを作成] ダイアログで、[コンソール アプリ] を選択し、[次へ] を選択します。
- [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
- [ 追加情報 ] ダイアログで、[ .NET 8.0 (長期サポート)] を選択し、[ 作成] を選択します。
必要な NuGet パッケージの追加
gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。
- .NET クライアントを含む Grpc.Net.Client。
- Google.Protobuf。C# の protobuf メッセージ API が含まれています。
-
Grpc.Tools。protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で、ツール>NuGet パッケージ マネージャー>Package Manager コンソールを選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。以下のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- ソリューション エクスプローラーでプロジェクトを右クリックします>Manage NuGet パッケージ。
- 「Browse」タブを選択します。
- 検索ボックスに 「Grpc.Net.Client 」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、[インストール] を選択します。
-
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
Add greet.proto
gRPC クライアント プロジェクトに Protos フォルダーを作成します。
gRPC Greeter サービスから 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
をHTTPS
サービス プロジェクト内のProperties/launchSettings.json
で指定されたGrpcGreeter
ポート番号に置き換えます。
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
押してデバッガーなしでクライアントを起動します。
クライアントは、 GreetingerClient という名前を含むメッセージを含む応答メッセージをサービスに送信します。 サービスから応答として "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 サービスを呼び出す」を参照してください。
Next steps
このチュートリアルでは、.NET gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法について説明します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
Prerequisites
Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
gRPC サービスの作成
- Visual Studio 2022 を開始し、 [新しいプロジェクトの作成] を選択します。
-
[新しいプロジェクトの作成] ダイアログで、
gRPC
を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。 -
[新しいプロジェクトの構成] ダイアログで、
GrpcGreeter
に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。 - Select Next.
- [ 追加情報 ] ダイアログで、[ .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 サービス プロジェクトのファイル の [プロパティ]\launchSettings.jsで 設定されます。
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 汎用ホスト」を参照してください。
- アプリの動作を構成するコード。 詳細については、「 アプリの起動」を参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリケーション] を選択し、 [次へ] を選択します。
- [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
- [ 追加情報 ] ダイアログで、[ .NET 6.0 (長期サポート)] を選択し、[ 作成] を選択します。
必要な NuGet パッケージの追加
gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。
- .NET クライアントを含む Grpc.Net.Client。
- Google.Protobuf。C# の protobuf メッセージ API が含まれています。
-
Grpc.Tools。protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で、ツール>NuGet パッケージ マネージャー>Package Manager コンソールを選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。以下のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- ソリューション エクスプローラーでプロジェクトを右クリックします>Manage NuGet パッケージ。
- 「Browse」タブを選択します。
- 検索ボックスに 「Grpc.Net.Client 」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、[インストール] を選択します。
-
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
Add greet.proto
gRPC クライアント プロジェクトに Protos フォルダーを作成します。
gRPC Greeter サービスから 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
をHTTPS
サービス プロジェクト内のProperties/launchSettings.json
で指定されたGrpcGreeter
ポート番号に置き換えます。
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
押してデバッガーなしでクライアントを起動します。
クライアントは、 GreetingerClient という名前を含むメッセージを含む応答メッセージをサービスに送信します。 サービスから応答として "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 サービスを呼び出す」を参照してください。
Next steps
このチュートリアルでは、.NET gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法について説明します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
Prerequisites
- Visual Studio 2022 と ASP.NET と Web 開発ワークロード。
- .NET 6 SDK
gRPC サービスの作成
- Visual Studio 2022 を開始し、 [新しいプロジェクトの作成] を選択します。
-
[新しいプロジェクトの作成] ダイアログで、
gRPC
を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。 -
[新しいプロジェクトの構成] ダイアログで、
GrpcGreeter
に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。 - Select Next.
- [ 追加情報 ] ダイアログで、[ .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 サービス プロジェクトのファイル の [プロパティ]\launchSettings.jsで 設定されます。
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 汎用ホスト」を参照してください。
- アプリの動作を構成するコード。 詳細については、「 アプリの起動」を参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリケーション] を選択し、 [次へ] を選択します。
- [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
- [ 追加情報 ] ダイアログで、[ .NET 6.0 (長期サポート)] を選択し、[ 作成] を選択します。
必要な NuGet パッケージの追加
gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。
- .NET クライアントを含む Grpc.Net.Client。
- Google.Protobuf。C# の protobuf メッセージ API が含まれています。
-
Grpc.Tools。protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で、ツール>NuGet パッケージ マネージャー>Package Manager コンソールを選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。以下のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- ソリューション エクスプローラーでプロジェクトを右クリックします>Manage NuGet パッケージ。
- 「Browse」タブを選択します。
- 検索ボックスに 「Grpc.Net.Client 」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、[インストール] を選択します。
-
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
Add greet.proto
gRPC クライアント プロジェクトに Protos フォルダーを作成します。
gRPC Greeter サービスから 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
をHTTPS
サービス プロジェクト内のProperties/launchSettings.json
で指定されたGrpcGreeter
ポート番号に置き換えます。
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
押してデバッガーなしでクライアントを起動します。
クライアントは、 GreetingerClient という名前を含むメッセージを含む応答メッセージをサービスに送信します。 サービスから応答として "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 サービスを呼び出す」を参照してください。
Next steps
このチュートリアルでは、.NET gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法について説明します。
最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
サンプル コードを表示またはダウンロードする (ダウンロード方法)。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
Prerequisites
- ASP.NET および Web 開発ワークロードを使用する Visual Studio 2019 16.8 以降のバージョン
- .NET 5 SDK
gRPC サービスの作成
- Visual Studio を起動し、 [新しいプロジェクトの作成] を選択します。
- [新しいプロジェクトの作成] ダイアログで、 [gRPC サービス] を選び、 [次へ] を選択します。
-
[新しいプロジェクトの構成] ダイアログで、
GrpcGreeter
に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。 - Select Next.
- [追加情報] ダイアログで、[ターゲット フレームワーク] ドロップダウンで [.NET 5.0] を選択します。
- Select Create.
サービスを実行する
Ctrl + F5 キーを押して、デバッガーなしで実行します。
SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。
IIS Express SSL 証明書を信頼する場合は、[ はい ] を選択します。
次のダイアログが表示されます。
開発証明書を信頼することに同意する場合は、[ はい ] を選択します。
Firefox ブラウザーを信頼する方法の詳細については、「Firefox SEC_ERROR_INADEQUATE_KEY_USAGE 証明書エラー」を参照してください。
Visual Studio によって IIS Express が起動され、アプリが実行されます。 アドレス バーには、
localhost:port#
などではなく、example.com
が表示されます。 これは、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 の概要」を参照してください。 -
サービス フォルダー:
Greeter
サービスの実装が含まれています。 -
appsettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。 -
Program.cs
: gRPC サービスのエントリ ポイントが含まれています。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。 -
Startup.cs
: アプリの動作を構成するコードが含まれています。 詳細については、「 アプリの起動」を参照してください。
.NET コンソール アプリで gRPC クライアントを作成する
- Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
- [ 新しいプロジェクトの作成 ] ダイアログで、[ コンソール アプリ (.NET)] を選択し、[ 次へ] を選択します。
- [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 作成] を選択します。
必要なパッケージを追加する
gRPC クライアント プロジェクトには、次のパッケージが必要です。
- .NET クライアントを含む Grpc.Net.Client。
- Google.Protobuf。C# の protobuf メッセージ API が含まれています。
-
Grpc.Tools。protobuf ファイルの C# ツール サポートが含まれています。 ツール パッケージは実行時に不要であり、依存関係には
PrivateAssets="All"
のマークが付きます。
パッケージ マネージャー コンソール (PMC) または NuGet パッケージの管理を使用してパッケージをインストールします。
パッケージをインストールするための PMC オプション
Visual Studio で、ツール>NuGet パッケージ マネージャー>Package Manager コンソールを選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。以下のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- ソリューション エクスプローラーでプロジェクトを右クリックします>Manage NuGet パッケージ。
- 「Browse」タブを選択します。
- 検索ボックスに 「Grpc.Net.Client 」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、[インストール] を選択します。
-
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
Add greet.proto
gRPC クライアント プロジェクトに Protos フォルダーを作成します。
gRPC Greeter サービスから 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
押してデバッガーなしでクライアントを起動します。
クライアントは、 GreetingerClient という名前を含むメッセージを含む応答メッセージをサービスに送信します。 サービスから応答として "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 サービスを呼び出す」を参照してください。
Next steps
このチュートリアルでは、.NET Core gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法について説明します。
最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。
サンプル コードを表示またはダウンロードする (ダウンロード方法)。
このチュートリアルでは、次の作業を行いました。
- gRPC サービスを作成する。
- gRPC クライアントを作成します。
- gRPC あいさつサービスで gRPC クライアントをテストします。
Prerequisites
- ASP.NET および Web 開発ワークロードを使用する Visual Studio 2019 16.4 以降のバージョン
- .NET Core 3.1 SDK
gRPC サービスの作成
Visual Studio を起動し、 [新しいプロジェクトの作成] を選択します。 または、Visual Studio の [ファイル] メニューから [ 新規>Project] を選択します。
[新しいプロジェクトの作成] ダイアログで、 [gRPC サービス] を選択して、 [次へ] を選択します。
プロジェクトに GrpcGreeter という名前を付けます。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。
Select Create.
[Create a new gRPC service](新しい gPRC サービスの作成) ダイアログで、次のようにします。
- gRPC サービス テンプレートが選択されています。
- Select Create.
サービスを実行する
Ctrl + F5 キーを押して、デバッガーなしで実行します。
SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。
IIS Express SSL 証明書を信頼する場合は、[ はい ] を選択します。
次のダイアログが表示されます。
開発証明書を信頼することに同意する場合は、[ はい ] を選択します。
Firefox ブラウザーを信頼する方法の詳細については、「Firefox SEC_ERROR_INADEQUATE_KEY_USAGE 証明書エラー」を参照してください。
Visual Studio によって IIS Express が起動され、アプリが実行されます。 アドレス バーには、
localhost:port#
などではなく、example.com
が表示されます。 これは、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 の概要」を参照してください。 -
サービス フォルダー:
Greeter
サービスの実装が含まれています。 -
appsettings.json
: Kestrel で使用されるプロトコルなどの構成データが含まれています。 詳細については、「ASP.NET Core の構成」を参照してください。 -
Program.cs
: gRPC サービスのエントリ ポイントが含まれています。 詳細については、「ASP.NET Core の .NET 汎用ホスト」を参照してください。 -
Startup.cs
: アプリの動作を構成するコードが含まれています。 詳細については、「 アプリの起動」を参照してください。
.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 パッケージ マネージャー>Package Manager コンソールを選択します。
[パッケージ マネージャー コンソール] ウィンドウから
cd GrpcGreeterClient
を実行し、GrpcGreeterClient.csproj
ファイルが含まれるフォルダーにディレクトリを変更します。以下のコマンドを実行します。
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
パッケージをインストールするための [NuGet パッケージの管理] オプション
- ソリューション エクスプローラーでプロジェクトを右クリックします>Manage NuGet パッケージ。
- 「Browse」タブを選択します。
- 検索ボックスに 「Grpc.Net.Client 」と入力します。
- [参照] タブから Grpc.Net.Client パッケージを選択し、[インストール] を選択します。
-
Google.Protobuf
とGrpc.Tools
に同じ手順を繰り返します。
Add greet.proto
gRPC クライアント プロジェクトに Protos フォルダーを作成します。
gRPC Greeter サービスから 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
押してデバッガーなしでクライアントを起動します。
クライアントは、 GreetingerClient という名前を含むメッセージを含む応答メッセージをサービスに送信します。 サービスから応答として "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 サービスを呼び出す」を参照してください。
Next steps
ASP.NET Core