概要
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)」のプロジェクトを作成します。
パッケージをインストールする
NuGet で以下のパッケージをインストールします。
- Grpc.Core
- Grpc.Tools
- Google.Protobuf
プロジェクトファイルを編集する
プロジェクトファイルに、次のコードを追加します。
proto ファイルからC# のソースコードを生成するための設定です。
<ItemGroup>
<Protobuf Include="**/*.proto" OutputDir="%(RelativePath)" CompileOutputs="false" GrpcServices="Server" />
</ItemGroup>
上記はサーバーサイドのファイルを生成する場合です。クライアントサイドの場合はGrpcServices
をClient
にします。
サーバー・クライアント両方のファイルを生成する場合は、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();
}
}
}
おわり。