次の方法で共有


チュートリアル: ASP.NET Core で gRPC のクライアントとサーバーを作成する

このチュートリアルでは、.NET gRPC クライアントと ASP.NET Core gRPC サーバーを作成する方法について説明します。 最終的に、gRPC あいさつサービスと通信する gRPC クライアントが与えられます。

このチュートリアルでは、次の作業を行いました。

  • gRPC サービスを作成する。
  • gRPC クライアントを作成します。
  • gRPC あいさつサービスで gRPC クライアントをテストします。

Prerequisites

gRPC サービスの作成

  • Visual Studio 2022 を起動し、[ 新しいプロジェクト] を選択します。
  • [新しいプロジェクトの作成] ダイアログで、gRPC を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。
  • [新しいプロジェクトの構成] ダイアログで、 GrpcGreeter に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。
  • Select Next.
  • [追加情報] ダイアログで、[.NET 9.0 (Standard Term Support)] を選択し、[の作成]選択します。

サービスを実行する

  • Ctrl + F5 キーを押して、デバッガーなしで実行します。

    SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。

    このプロジェクトは SSL を使用するように構成されています。ブラウザーでの SSL の警告を避けるには、IIS Express が生成した自己署名証明書を信頼することを選択します。IIS Express の SSL 証明書を信頼しますか?

    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、以下が含まれています。

.NET コンソール アプリで gRPC クライアントを作成する

  • Visual Studio の 2 番目のインスタンスを開き、[ 新しいプロジェクト] を選択します。
  • [新しいプロジェクトを作成] ダイアログで、[コンソール アプリ] を選択し、[次へ] を選択します。
  • [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
  • [追加情報] ダイアログで、[.NET 9.0 (Standard Term Support)] を選択し、[の作成]選択します。

必要な NuGet パッケージの追加

gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。

パッケージ マネージャー コンソール (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.ProtobufGrpc.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();
    
  • 上記の強調表示されたコードでは、ローカルホスト ポート番号 7042HTTPS サービス プロジェクト内の 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

gRPC サービスの作成

  • Visual Studio 2022 を起動し、[ 新しいプロジェクト] を選択します。
  • [新しいプロジェクトの作成] ダイアログで、gRPC を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。
  • [新しいプロジェクトの構成] ダイアログで、 GrpcGreeter に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。
  • Select Next.
  • [ 追加情報 ] ダイアログで、[ .NET 8.0 (長期サポート)] を選択し、[ 作成] を選択します。

サービスを実行する

  • Ctrl + F5 キーを押して、デバッガーなしで実行します。

    SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。

    このプロジェクトは SSL を使用するように構成されています。ブラウザーでの SSL の警告を避けるには、IIS Express が生成した自己署名証明書を信頼することを選択します。IIS Express の SSL 証明書を信頼しますか?

    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、以下が含まれています。

.NET コンソール アプリで gRPC クライアントを作成する

  • Visual Studio の 2 番目のインスタンスを開き、[ 新しいプロジェクト] を選択します。
  • [新しいプロジェクトを作成] ダイアログで、[コンソール アプリ] を選択し、[次へ] を選択します。
  • [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
  • [ 追加情報 ] ダイアログで、[ .NET 8.0 (長期サポート)] を選択し、[ 作成] を選択します。

必要な NuGet パッケージの追加

gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。

パッケージ マネージャー コンソール (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.ProtobufGrpc.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();
    
  • 上記の強調表示されたコードでは、ローカルホスト ポート番号 7042HTTPS サービス プロジェクト内の 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

gRPC サービスの作成

  • Visual Studio 2022 を開始し、 [新しいプロジェクトの作成] を選択します。
  • [新しいプロジェクトの作成] ダイアログで、gRPC を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。
  • [新しいプロジェクトの構成] ダイアログで、 GrpcGreeter に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。
  • Select Next.
  • [ 追加情報 ] ダイアログで、[ .NET 6.0 (長期サポート)] を選択し、[ 作成] を選択します。

サービスを実行する

  • Ctrl + F5 キーを押して、デバッガーなしで実行します。

    SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。

    このプロジェクトは SSL を使用するように構成されています。ブラウザーでの SSL の警告を避けるには、IIS Express が生成した自己署名証明書を信頼することを選択します。IIS Express の SSL 証明書を信頼しますか?

    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、以下が含まれています。

.NET コンソール アプリで gRPC クライアントを作成する

  • Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
  • [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリケーション] を選択し、 [次へ] を選択します。
  • [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
  • [ 追加情報 ] ダイアログで、[ .NET 6.0 (長期サポート)] を選択し、[ 作成] を選択します。

必要な NuGet パッケージの追加

gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。

パッケージ マネージャー コンソール (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.ProtobufGrpc.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();
    
  • 上記の強調表示されたコードでは、ローカルホスト ポート番号 7042HTTPS サービス プロジェクト内の 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

gRPC サービスの作成

  • Visual Studio 2022 を開始し、 [新しいプロジェクトの作成] を選択します。
  • [新しいプロジェクトの作成] ダイアログで、gRPC を検索します。 [ASP.NET Core gRPC サービス] を選択してから、 [次へ] を選択します。
  • [新しいプロジェクトの構成] ダイアログで、 GrpcGreeter に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。
  • Select Next.
  • [ 追加情報 ] ダイアログで、[ .NET 6.0 (長期サポート)] を選択し、[ 作成] を選択します。

サービスを実行する

  • Ctrl + F5 キーを押して、デバッガーなしで実行します。

    SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。

    このプロジェクトは SSL を使用するように構成されています。ブラウザーでの SSL の警告を避けるには、IIS Express が生成した自己署名証明書を信頼することを選択します。IIS Express の SSL 証明書を信頼しますか?

    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、以下が含まれています。

.NET コンソール アプリで gRPC クライアントを作成する

  • Visual Studio のインスタンスをもう 1 つ開き、 [新しいプロジェクトの作成] を選択します。
  • [新しいプロジェクトの作成] ダイアログで、 [コンソール アプリケーション] を選択し、 [次へ] を選択します。
  • [ プロジェクト名 ] テキスト ボックスに「 GrpcGreeterClient 」と入力し、[ 次へ] を選択します。
  • [ 追加情報 ] ダイアログで、[ .NET 6.0 (長期サポート)] を選択し、[ 作成] を選択します。

必要な NuGet パッケージの追加

gRPC クライアント プロジェクトには、次の NuGet パッケージが必要です。

パッケージ マネージャー コンソール (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.ProtobufGrpc.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();
    
  • 上記の強調表示されたコードでは、ローカルホスト ポート番号 7042HTTPS サービス プロジェクト内の 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

gRPC サービスの作成

  • Visual Studio を起動し、 [新しいプロジェクトの作成] を選択します。
  • [新しいプロジェクトの作成] ダイアログで、 [gRPC サービス] を選び、 [次へ] を選択します。
  • [新しいプロジェクトの構成] ダイアログで、 GrpcGreeter に「」と入力します。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。
  • Select Next.
  • [追加情報] ダイアログで、[ターゲット フレームワーク] ドロップダウンで [.NET 5.0] を選択します。
  • Select Create.

サービスを実行する

  • Ctrl + F5 キーを押して、デバッガーなしで実行します。

    SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。

    このプロジェクトは SSL を使用するように構成されています。ブラウザーでの SSL の警告を避けるには、IIS Express が生成した自己署名証明書を信頼することを選択します。IIS Express の SSL 証明書を信頼しますか?

    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 クライアント プロジェクトには、次のパッケージが必要です。

パッケージ マネージャー コンソール (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.ProtobufGrpc.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

gRPC サービスの作成

  • Visual Studio を起動し、 [新しいプロジェクトの作成] を選択します。 または、Visual Studio の [ファイル] メニューから [ 新規>Project] を選択します。

  • [新しいプロジェクトの作成] ダイアログで、 [gRPC サービス] を選択して、 [次へ] を選択します。

    Visual Studio の [新しいプロジェクトの作成] ダイアログ

  • プロジェクトに GrpcGreeter という名前を付けます。 コードをコピーして貼り付けるときに名前空間が一致するように、プロジェクトに GrpcGreeter という名前を付ける必要があります。

  • Select Create.

  • [Create a new gRPC service](新しい gPRC サービスの作成) ダイアログで、次のようにします。

    • gRPC サービス テンプレートが選択されています。
    • Select Create.

サービスを実行する

  • Ctrl + F5 キーを押して、デバッガーなしで実行します。

    SSL を使用するようにプロジェクトがまだ構成されていない場合、Visual Studio に次のダイアログが表示されます。

    このプロジェクトは SSL を使用するように構成されています。ブラウザーでの SSL の警告を避けるには、IIS Express が生成した自己署名証明書を信頼することを選択します。IIS Express の SSL 証明書を信頼しますか?

    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.ProtobufGrpc.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