在 ASP.NET Core 中为 gRPC 服务添加全局异常处理

2022-04-16 14:46:00
目录
一、咨询区Dmitriy二、回答区valentasm三、点评区

stem.Linq;using System.Threading.Tasks;using Grpc.Core;using Grpc.Core.Interceptors;using Microsoft.Extensions.Logging;namespace Systemx.WebService.Services{ public class ServerLoggerInterceptor : Interceptor { private readonly ILogger<ServerLoggerInterceptor> _logger; public ServerLoggerInterceptor(ILogger<ServerLoggerInterceptor> logger) { _logger = logger; } public override async Task<TResponse> UnaryServerHandler<TRequest, TResponse>( TRequest request, ServerCallContext context, UnaryServerMethod<TRequest, TResponse> continuation) { //LogCall<TRequest, TResponse>(MethodType.Unary, context); try { return await continuation(request, context); } catch (Exception ex) { // Note: The gRPC framework also logs exceptions thrown by handlers to .NET Core logging. _logger.LogError(ex, $"Error thrown by {context.Method}."); throw; } } }}

接下来就可以在 Startup 中通过 AddGrpc 注入啦:

services.AddGrpc(options =>{  {    options.Interceptors.Add<ServerLoggerInterceptor>();    options.EnableDetailedErrors = true;  }});

三、点评区

grpc 早已经替代 wcf 成功一种基于tcp的跨机器通讯技术,看得出 grpc 和 asp.net core 集成越来越好,是得需要大家花费精力好好学习。