第3回は、連載第2回で作成したシンプルな既定のサーバアプリケーションに具体的なサービスを実装し、それにアクセスするクライアントアプリケーションを作成します。サーバアプリケーションと同じくC#と.NET 6で開発していきます。プロトコル定義ファイルはサーバとクライアントで共有できること、クライアントは手続きの呼び出しのみに集中すればよいことなどを紹介します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
連載第2回では、.NETにおけるgRPCのサポートを紹介しました。既定のサーバアプリケーションを作成し、それを汎用(はんよう)のgRPCクライアントEvansからアクセスして、動作を確認しました。さらに、サーバアプリケーションの基本的な構造にも触れました。
今回は、第2回の内容を踏まえた上でgRPCサーバとクライアントを実装していきます。作成するアプリケーションのテーマは「書籍情報検索サービス『BookInfo』」です。BookInfoは、静的に用意されたリストからキーワード検索し、結果を返すだけというシンプルなものですが、gRPCを用いて独自のサービスを実装したいときの手順として参考になるでしょう。
作業の内容は、既定のファイルを複製し、BookInfoサービスに合わせたクラス名などを修正していくというイメージです。大まかに、以下の手順でサービスを実装していきます。
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.