0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C# でgRPC サーバーの開発環境を作る

Posted at

概要

C# でgRPC サーバーの開発環境を作成するための手順です。
Visual Studio 2019 を使ってます。
だいたいこれの通りです。
https://docs.microsoft.com/ja-jp/aspnet/core/grpc/basics?view=aspnetcore-3.0
https://grpc.io/docs/quickstart/csharp/

C# のプロジェクトを作成する

「コンソールアプリ(.NET Core)」のプロジェクトを作成します。
image.png

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

NuGet で以下のパッケージをインストールします。

  • Grpc.Core
  • Grpc.Tools
  • Google.Protobuf

プロジェクトファイルを編集する

プロジェクトファイルに、次のコードを追加します。
proto ファイルからC# のソースコードを生成するための設定です。

  <ItemGroup>
    <Protobuf Include="**/*.proto" OutputDir="%(RelativePath)" CompileOutputs="false" GrpcServices="Server" />
  </ItemGroup>

上記はサーバーサイドのファイルを生成する場合です。クライアントサイドの場合はGrpcServicesClient にします。
サーバー・クライアント両方のファイルを生成する場合は、Both にします。

proto ファイルを追加する

例として次のようなproto ファイルを追加します。

helloworld.proto
syntax = "proto3";

// 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;
}

追加すると、自動的にC# のファイルが生成されます。

サーバー起動

下のようなコードでサーバーが動きます。

using Grpc.Core;
using System;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class GreeterImpl : Greeter.GreeterBase
    {
        // Server side handler of the SayHello RPC
        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
        }
    }

    class Program
    {
        const int Port = 50051;

        public static void Main(string[] args)
        {
            Server server = new Server
            {
                Services = { Greeter.BindService(new GreeterImpl()) },
                Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
            };
            server.Start();

            Console.WriteLine("Greeter server listening on port " + Port);
            Console.WriteLine("Press any key to stop the server...");
            Console.ReadKey();

            server.ShutdownAsync().Wait();
        }
    }
}

おわり。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?