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

コメントをお書きください