2018年1月14日日曜日

gRPC の例外処理

gRPC では、サービス側で例外が発生するとクライアント側で RpcException がスローされます。プロジェクトのエラーコードなどを渡すには MetaData 型(キー&値の組み合わせ)の Trailers プロパティを使用することになるようです。




RpcException をスローした場合 

 

public override Task Search(Request request, ServerCallContext context)
{
    Metadata trailers = new Metadata();
    trailers.Add("ErrorCode", "123");

    throw new RpcException(
        new Status(StatusCode.Internal, "実行できません。")
        , trailers
    );
}

クライアント側でも RpcException がキャッチされます。Status と Trailers にサービス側で設定した内容が設定されています。


RpcException ではない例外をスローした場合

 

public override Task Search(Request request, ServerCallContext context)
{
    var ex = new InvalidOperationException( "実行できません。");
    ex.Data.Add("ErrorCode", "123");

    throw ex;
}

クライアント側では RpcException がキャッチされます。但し、Status は Unknown になり、Trailers にもサービス側で設定した内容は設定されません。Data にも設定されません。

0 件のコメント:

コメントを投稿

paiza のスキルチェックをやってみました

いまさら感はありますが、 paiza のスキルチェックをやってみました。指定された時間内にコードを書いてユニットテストにかけ、その結果を基に評価を数値化してくれるというものですが、ゲーム感覚で空き時間を見つけて進めていこうと考えています。 どうやら時間が短いほど高い評価を得...