我想知道是否有一种方法可以让Grpc .Net Core将服务器端的原始异常抛回给客户端。
问题如下。当调用grpc服务时,例如:
客户端:
using (var channel = GrpcChannel.ForAddress("http://localhost:10042"))
{
var greeterService = channel.CreateGrpcService<IGreetService>();
var result = await greeterService.Greet();
Console.WriteLine(result.Greet);
}
服务器:
public async Task<Greeting> Greet()
{
throw new ArgumentException();
}
运行此代码,将会引发以下的RpcException异常:
Grpc.Core.RpcException: 'Status(StatusCode=Unknown, Detail="Exception was thrown by handler.")'
现在,我非常希望能够使其朝着在客户端引发 ArgumentException 的方向发展,以便更好地处理该问题。
据我所知,可以在 Startup.cs 中执行以下操作:
services.AddCodeFirstGrpc(options => options.EnableDetailedErrors = true);
结果:
Grpc.Core.RpcException: 'Status(StatusCode=Unknown, Detail="Exception was thrown by handler. ArgumentException: Value does not fall within the expected range.")'
这已经更好了,但还不够完美。
我的问题是 - 我能否在客户端上提升服务器的异常?我所了解到的是,grpc允许“拦截器”来拦截grpc调用。这是可能在这里做些什么吗?