C#でgRPCクライアントを開発する――.NETのgRPCクライアントサポート:スキマ時間にこっそり学ぶ「gRPC」入門(3)
第3回は、連載第2回で作成したシンプルな既定のサーバアプリケーションに具体的なサービスを実装し、それにアクセスするクライアントアプリケーションを作成します。サーバアプリケーションと同じくC#と.NET 6で開発していきます。プロトコル定義ファイルはサーバとクライアントで共有できること、クライアントは手続きの呼び出しのみに集中すればよいことなどを紹介します。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
書籍情報検索サービスをテーマに、gRPCを使ったアプリケーションを実装してみる
連載第2回では、.NETにおけるgRPCのサポートを紹介しました。既定のサーバアプリケーションを作成し、それを汎用(はんよう)のgRPCクライアントEvansからアクセスして、動作を確認しました。さらに、サーバアプリケーションの基本的な構造にも触れました。
今回は、第2回の内容を踏まえた上でgRPCサーバとクライアントを実装していきます。作成するアプリケーションのテーマは「書籍情報検索サービス『BookInfo』」です。BookInfoは、静的に用意されたリストからキーワード検索し、結果を返すだけというシンプルなものですが、gRPCを用いて独自のサービスを実装したいときの手順として参考になるでしょう。
作業の内容は、既定のファイルを複製し、BookInfoサービスに合わせたクラス名などを修正していくというイメージです。大まかに、以下の手順でサービスを実装していきます。
- プロトコル定義ファイルの配置と修正(Protos/bookinfo.protoファイル)
- プロジェクト設定ファイルの修正とビルド(GrpcBookInfo.csprojファイル)
- サービス記述ファイルの複製と修正(Services/BookInfoService.csファイル)
- アプリケーション起動時のサービスの登録(Program.csファイル)
- 検索手続きの拡張(Services/BookInfoService.csファイル)
プロトコル定義ファイルを配置して修正する
BookInfoサービスのためのプロトコル定義ファイルをProtosフォルダに配置します。連載第1回で作成したbook.protoファイルを、bookinfo.protoファイルとしてProtosフォルダにコピーします。そして、以下のように修正しておきます。変更の多くは、C#のクラス名やフィールド名の衝突や混同を避けるためのものです。
// パッケージ名を変更する:AtmarkIt⇒bookinfo package bookinfo; …略… // GreeterService.csと同じ内容とするためにオプションを追加する option csharp_namespace = "GrpcBookInfo"; …略… // 名前の衝突を避けるためにBook⇒BookItemとメッセージ名を変更する message BookItem { …略… } …略… message SearchResponse { int32 status_code = 1; BookItem item = 2; // メッセージ名BookItemに合わせて変更 } // 名前の衝突を避けるためBookService⇒BookInfoと変更する service BookInfo { rpc Search(SearchRequest) returns (SearchResponse); }
プロジェクト設定ファイルを修正してビルドする
Copyright © ITmedia, Inc. All Rights Reserved.