どうやら、一筋縄ではいかない砂の迷宮に迷い込んだらしい。この顛末を書き残しておくか。
かつて、.NET Frameworkという大地で、我々はWCF(Windows Communication Foundation)という名の、万能にして偉大な魔法を操っていた。しかし、時代は流れ、.NET 6という新たな大地では、その古の魔法はもはや使えない。神々(Microsoft)は、その後継者として「gRPC」という、より強力で、より高速な、新たな王を我々に示した。
今回は、Windowsという故郷の大地で、この新たな王gRPCの力を借り、ゴーレムを錬成する。そして、localhostという名の安息所から、IPアドレスという広大な世界へ、その魂を解き放つ儀式を執り行う。これは、古き王への追悼と、新たなる王への忠誠を誓う、魂の継承儀式の記録である。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 第一の儀式:gRPCサーバという名の、王の神殿を築く
- 第二の儀式:王と対話する、使徒を創る(gRPCクライアント)
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
- gRPCという、HTTP/2の光の道を駆ける、新たな魔法体系に興味がある者
- WCFという古の魔法の終焉に戸惑い、次なる力を求める探求者
第一の儀式:gRPCサーバという名の、王の神殿を築く
Visual Studio 2022という名の魔法の工房で、新たなプロジェクトを創造する。テンプレートから「ASP.NET Core gRPC サービス」を選び、GrpcGreeterという名の、王の神殿を築き始める。
神殿には、王の声を聴くための魔法の耳「NLog」を、NuGetという名の宝物庫から授ける。
魂の設計図を書き換える:launchSettings.json
ここが、今回の儀式で最も重要な秘儀だ。神殿の設計図であるlaunchSettings.jsonを開き、applicationUrlに記されたlocalhostという内なる言葉を、0.0.0.0という、全世界に向けた開かれた言葉へと書き換える。
{ "profiles": { "GrpcGreeter": { "applicationUrl": "http://0.0.0.0:5217;https://0.0.0.0:7217", // ... } } }
この一文こそが、王が自らの神殿に閉じこもるのをやめ、広大な世界からの呼びかけに応えるための、最も重要な呪文である。
王の降臨
神殿を起動すると、初回に限り、SSL証明書という名の「聖なる結界」を信頼するかの信託を問われる。これを承認すれば、王はついに、我々の世界に降臨する。
第二の儀式:王と対話する、使徒を創る(gRPCクライアント)
王と対話するためには、その言葉を理解し、伝えるための「使徒(クライアント)」が必要だ。 新たなコンソールアプリのプロジェクトを創り、サーバと同様に、gRPCとNLogに必要なパッケージを授ける。
使徒の心得:greet.proto
王との対話の作法を記した、greet.protoという名の聖典を、サーバの神殿からコピーする。ただし、csharp_namespaceは、この使徒自身の名であるGrpcGreeterClientへと書き換えねばならない。
魂の接続:Program.cs
いよいよ、使徒が王と対話する、感動の瞬間だ。
ipconfigで突き止めた、王の神殿の座標(IPアドレス)を指定する。そして、自己署名証明書という結界を信頼する、という誓いを立てることを忘れてはならない。
// 王の神殿の座標 var server = "https://172.18.149.227:7217"; var option = new GrpcChannelOptions() { HttpClient = new HttpClient(new HttpClientHandler { // 自己署名証明書という結界を、信頼する ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, }) }; var channel = GrpcChannel.ForAddress(server, option); var client = new Greeter.GreeterClient(channel); // 使徒が王へ、最初の言葉を投げかける var response = await client.SayHelloAsync(new HelloRequest { Name = "World" });
対話の記録:Log2Console
Log2Consoleという名の真実の鏡を覗き込めば、王と使徒、二つの魂が交わした、荘厳な対話の記録を、その目で確かめることができる。
羊皮紙を巻く前に
WCFの時代は終わった。しかし、我々はgRPCという、より強力な魔法を手に入れた。
localhostの壁を越え、IPアドレスで世界と繋がるためのlaunchSettings.jsonの書き換えは、些細だが、決定的に重要な儀式だった。
この旅で得た知見は、次の冒険、すなわち「Linux」という異世界でのゴーレム錬成へと繋がっていく。
この羊皮紙が、同じように古き王との別れを悲しみ、新たなる王への忠誠を誓う、未来の冒険者の助けとなることを願う。
おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。
砂漠で見つけた魔法のランプ
- ASP.NET Core gRPC チュートリアル | 公式の古文書
- NLog with ASP.NET Core 6 | 賢者の言葉
- DangerousAcceptAnyServerCertificateValidator | 賢者の言葉
- Log2Console 日本語対応版 | 魂の声を聴く真実の鏡
ラクダの独り言
ご主人が「古き王は死んだ、新しい王の時代だ!」なんて、一人で興奮している。俺に言わせりゃ、王様なんてのは、誰だっていいんだ。ちゃんと俺に、美味い干し草と、新鮮な水をくれる王様ならな。まったく、人間の忠誠心ってやつは、よく分からんぜ。やれやれだぜ。