logo

【gRPC】VSCODEとDotNetでgRPC環境を構築してみる

投稿日2023-02-05

更新日2024-05-16

Picture of the logo

タグ一覧

目次(タップして移動)

Visual StudioではなくVSCODE上でgRPC環境の構築を簡潔させます。今回は初歩的な開通テストなのでHTTPS化はしません。前提条件としてDotNetCLIが使える状態であること。

サーバー側の構築

テンプレの作成

まずターミナル上でdotnet new grpc -o [プロジェクト名]と打ち込んで実行する。 プロジェクト名のディレクトリが出来るのでそこをワークスペースとしてVSCODEを開く。 すると初めからサーバーは既にほぼ動く状態に出来上がっている。 Server Protosにある.protoファイルはクライアント側でも使います。

launchSettings.jsonの修正

今回はHTTPのみのテストなのでHTTPSの部分をコメントアウトするか削除する。しないとエラーで起動しない。

launchSetting

クライアント側の構築

別の場所にdotnet new console -o [プロジェクト名]として、新しくワークスペースを作る。

protosの作成

プロジェクトのトップディレクトリにprotosディレクトリを作成し、先ほどのサーバー側で作られたgreet.protoをコピーする

namespaceはクライアント側のものと同じClientとする。

//greet.proto
syntax = "proto3";
//namespaceをClientに変更する
option csharp_namespace = "Client";

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

.protoファイルのコピーが終わったら、プロジェクトファイル(.csproj)に下記の追記をする。 csproj追記

必要なパッケージをインストールする

必要なパッケージは3つ

  • Grpc.Net.Client
  • Google.Protobuf
  • Grpc.Tools

パッケージのインストールにはNuget Package Managerが便利です。 Nuget

C#コードの作成

次にC#コードの記述ですが、一旦これだけ書いたところでビルドする。

using Grpc.Net.Client;

namespace Client
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using var channel = GrpcChannel.ForAddress("http://localhost:5200");
        }
    }
}

まず一度、dotnet buildでビルドしたところで残りのコードを記述する。この、「先に一度ビルドをする」ことでprotobufに対するC#コードが自動生成される。

これをせずに一気に全てのコードを書いてしまうと、Greeterクラスが存在せずエラーになってしまう。

ビルドが成功したら残りのコードも書きましょう。

using Grpc.Net.Client;

namespace Client
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using var channel = GrpcChannel.ForAddress("http://localhost:5200");
            var client = new Greeter.GreeterClient(channel);

            var reply = await client.SayHelloAsync(new HelloRequest { Name = "gazushige" });
            Console.WriteLine("Response: " + reply.Message);

            await channel.ShutdownAsync();
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

このサンプルでは、gRPCクライアントを作成するために、GreeterClientクラスを使用しています。このクラスは、gRPCサーバーとの通信に必要な通信チャネルを管理します。

gRPCクライアントが作成されたら、SayHelloAsyncメソッドを使用して、gRPCサーバーにリクエストを送信することができます。このメソッドは、非同期で実行されるため、gRPCサーバーからのレスポンスを待つことができます。

実行結果

まずサーバー側を起動して待ち受け状態にする。 次にクライアント側を実行する。結果は下記のとおり。 result

以上で、dotnetを用いたc# gRPCの開通テストは終わりです。






このサイトをシェアする