Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当gRPC客户端对方法抛出RpcException时,如何获取内部错误的innerException_C#_Grpc_Polly - Fatal编程技术网

C# 当gRPC客户端对方法抛出RpcException时,如何获取内部错误的innerException

C# 当gRPC客户端对方法抛出RpcException时,如何获取内部错误的innerException,c#,grpc,polly,C#,Grpc,Polly,我想在.NET Core 3.1 gRPC客户端/服务器之间添加弹性,使用Polly.NET处理回退重试策略 我对gRPC的RpcException不满意。我想知道是否有更好的方法来检测强制关闭的远程连接。当grpc在客户端或grpc服务重新启动后启动时,会发生这种情况 内部异常是null,找到异常的唯一方法是解析错误消息——不像我希望的那样可靠 如何在RpcException中获取Win32异常 私有静态IAsyncPolicy RetryTransientException() { 退货政策

我想在.NET Core 3.1 gRPC客户端/服务器之间添加弹性,使用Polly.NET处理回退重试策略

我对gRPC的
RpcException
不满意。我想知道是否有更好的方法来检测强制关闭的远程连接。当grpc在客户端或grpc服务重新启动后启动时,会发生这种情况

内部异常是
null
,找到异常的唯一方法是解析错误消息——不像我希望的那样可靠

如何在
RpcException
中获取Win32异常

私有静态IAsyncPolicy RetryTransientException()
{
退货政策
.Handle(rpcException=>IsTransient(rpcException.StatusCode))
.或(IsRemoteForcedConnection)
.WaitAndRetryForeverAsync(
(重试尝试,ctx)=>TimeSpan.FromSeconds(数学功率(2,重试尝试)),
(异常、重试、时间跨度、上下文)=>
{
context.GetLogger()?.Information(异常,
“[onRetry]{0}暂时错误尝试{1}重新连接gRpc服务器。”,
context.PolicyKey,重试);
}
)
.WithPolicyKey(PolicyNames.PersistentClientStream+“-waitandretrytransienterrors”);
}
专用静态布尔值是瞬态的(状态代码状态)
{
如果(状态==状态代码.不可用)
返回true;
如果(状态==状态代码。超出死线)
返回true;
返回false;
}
专用静态bool IsRemoteForcedConnection(RpcException RpcException)
{
返回rpcException.StatusCode==StatusCode.Internal
&&Message.Contains(“System.Net.Sockets.SocketException(10061)”;
}

请参见以下内容:检查上一个win32错误是个好主意。假设所有“内部”gRPC状态代码均为Win32错误,则应为ok。如果某些错误不是Win32错误,则可能会出现不相关的错误。真的希望GRPCAPI中有一些东西可以解决这个问题。请参阅以下内容:检查上一个win32错误的好主意。假设所有“内部”gRPC状态代码均为Win32错误,则应为ok。如果某些错误不是Win32错误,则可能会出现不相关的错误。我真的希望gRPC api中有一些东西可以做到这一点。