RpcException on ConfigurationLoadCredential .Net 7



我的客户端gRPC向我的gRPC服务器发送多个请求,但第一个请求崩溃,RpcException:

Status(StatusCode="Unavailable", Detail="Error starting gRPC call.)HttpRequestException:内部错误发生。ConfigurationLoadCredential failed: Unknown (0x80090331) (localhost:5057) QuicException:内部错误。ConfigurationLoadCredential failed: Unknown (0x80090331)", DebugException="System.Net.Http。HttpRequestException:内部错误发生。ConfigurationLoadCredential failed: Unknown (0x80090331) (localhost:5057)")

Next请求不会崩溃。客户端应用程序和服务器应用程序运行在Windows server 2022上,并作为Windows Service安装。

事件查看器错误记录:

创建TLS客户端凭证时发生致命错误。内部错误状态为10013。

在Windows 10和Windows Server 2019中,没有请求崩溃…真奇怪。

gRPC客户端(我不使用证书进行测试):

services.AddGrpcClient<ShipmentProtoService.ShipmentProtoServiceClient>(o =>
{
o.Address = new Uri("my uri"));
})
.ConfigureChannel(op =>
{
var httpClientHandler = new HttpClientHandler();
httpClientHandler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;

op.HttpHandler = httpClientHandler;
});

gRPC Server:

services.AddGrpc(opt =>
{
opt.EnableDetailedErrors = true;
opt.Interceptors.Add<LoggerInterceptor>();
opt.Interceptors.Add<ExceptionInterceptor>();
});

我测试了向Windows Server 2019发送数百个gRPC请求,没有遇到任何错误。当我在Windows Server 2022上执行相同的测试时,我收到了错误:

'创建TLS客户端时发生不可恢复的错误证书。内部错误状态为10013。

两台服务器使用的协议相同:TLS 1.1、TLS 1.2和TLS 1.3。在等待了解问题的同时,如果有错误,我使用Polly Library重新发送请求。

var policy = Polly.Policy.Handle<Exception>()
.WaitAndRetryAsync(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) =>
{
_logger.LogWarning(ex, "Could not get data from gRPC protocol after {Timeout}s ({ExceptionMessage})", $"{time.TotalSeconds:n1}", ex.Message);
});
var response= await policy.ExecuteAndCaptureAsync(async () =>
{
return await _myService.GetDataAsync(new Request
{
IdCom = idcom,
Value = "test"
});
});

相关内容

  • 没有找到相关文章

最新更新