· 

gRPCやってみる(4)-->botu

久々にgRPCに取り組んでみる。お題としてAES暗号文を作ってくれるサービスってことで。

gRPCやってみる(3)と同じように中身をじゃんじゃん変えていく。

ファイル名はこんな感じ。

で、

rijndael.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf Include="Protos\rijndael-srv.proto" GrpcServices="Server" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Grpc.AspNetCore" Version="2.49.0" />
  </ItemGroup>

</Project>

Program.cs

using rijndael_srv.Services;

var builder = WebApplication.CreateBuilder(args);

// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682

// Add services to the container.
builder.Services.AddGrpc();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.MapGrpcService<AES128EncSrvService>();
app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");

app.Run();

rijndael.proto

syntax = "proto3";

option csharp_namespace = "rijndael_srv";

package rijndael_srv;

service AES128EncSrv {
  rpc AES128Enc (AES128EncRequest) returns (AES128EncReply);
}

message AES128EncReply{
  string encoded=1;
}

message AES128EncRequest{
  string plain=1;
  string key=2;
}

AES128EncService.cs

using Grpc.Core;
using rijndael_srv;

namespace rijndael_srv.Services;

public class AES128EncSrvService : AES128EncSrv.AES128EncSrvBase
{
    private readonly ILogger<AES128EncSrvService> _logger;
    public AES128EncSrvService(ILogger<AES128EncSrvService> logger)
    {
        _logger = logger;
    }

    public override Task<AES128EncReply> AES128Enc(AES128EncRequest request, ServerCallContext context)
    {
        return Task.FromResult(new AES128EncReply
        {
            Encoded = "Hello " + request.Plain
        });
    }
}

一旦ビルドして、うまくいっている。

 

と、ここまでは前回から1ミリ程度の前進なんだけど、実は1時間くらいは悩んだ。それは、、、rijndael-srv.protoでmessage内に宣言した変数をAES128EncService.csから使用するわけなんだけど、、、最初の1文字を大文字にせんといかん、、、のです。何なんやこのクソ仕様。ツールが変数名に対して勝手に手を加えるとかまじダメやろ。