久々に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文字を大文字にせんといかん、、、のです。何なんやこのクソ仕様。ツールが変数名に対して勝手に手を加えるとかまじダメやろ。
コメントをお書きください