gRPCの接続が上手くいかない場合の対処方法

仕事でgRPCを使ったツールを使っているのですが(サーバー側C++/クライアント側C#)、接続が失敗する人がいました。その時は環境のせいかなぁ?と思っていたのですが、ちょっと人数が多くなってきて、本気で調べてみたのでその備忘録です。

 

まずgRPCの詳細ログの機能を有効にします。

stackoverflow.com

 

上記のページに書いてある通り、以下の環境変数を設定します。

GRPC_TRACE=all
GRPC_VERBOSITY=DEBUG

PCの設定で設定してもよいですし、C#のコードでEnvironment.SetEnvironmentVariableを使って設定しても大丈夫です。

 

で、接続できない状態を再現してログを確認。

大量のログが出ているので、error等の文字列で少しずつ見ていきます。

今回は以下のようなエラーが出ていました。

handshake_manager ... "HTTP proxy returned response code 503"

これですね。

どうやらproxy環境で環境変数にhttp_proxyやhttps_proxyを設定していると、

localhost接続等でもproxyを見に行ってしまうらしく、接続に失敗するようです。

  1. http_proxy、https_proxy等の環境変数を削除する
  2. no_proxy=localhost,127.0.0.1等を設定する

上記どちらかの対応で接続に成功するようになります。

no_proxy設定はPCの設定でもC#コードで設定しても大丈夫です。

 

困ったら詳細ログを出してエラーを特定し、ググる

でとりあえず解決できると思います。