iT邦幫忙

2025 iThome 鐵人賽

DAY 23
1
Software Development

30 天的 .Net gRPC 迷途系列 第 23

Day23 gRPC 的 StatusCode 處理

  • 分享至 

  • xImage
  •  

gRPC 跟 HTTP 一樣也有狀態碼可以使用,提供 Server/Client 可以做對應的處理

gRPC Status 網址可以供參考

預設都會回傳 Success 的狀態碼(Status: 0)

如果有需要做一些處置供 Client 處理,可以拋回對應的狀態碼

Server

public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
    public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
    {
        logger.LogInformation("The message is received from {Name}", request.Name);

        if (string.IsNullOrEmpty(request.Name))
        {
            // 可拋對應的 StatusCode 供 Client 端處理
            throw new RpcException(new Grpc.Core.Status(StatusCode.InvalidArgument, "Name 欄位必填"));
        }

        return Task.FromResult(new HelloReply
        {
            Message = "Hello " + request.Name
        });
    }
}

Client

var channel = GrpcChannel.ForAddress("https://localhost:7204");

try
{
    var greeterClient = new Greeter.GreeterClient(channel);

    var helloRes = greeterClient.SayHello(new HelloRequest { Name = "" });
}
catch (RpcException ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}

Rich-Error-Handling

有別於單純的 gRPC Status,對於錯誤處理 Google 也有提供一套很類似 HTTP 的錯誤處理

Grpc.StatusProto 有興趣的可以到官方文件參考


上一篇
Day22 健康狀態檢查
下一篇
Day24 Server 部署
系列文
30 天的 .Net gRPC 迷途26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言