我目前正在以这种方式配置我的httpclientfactory
HttpClientHandler httpClientHandler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
};
serviceCollection.AddHttpClient("ignoreSSL", c =>
{}).ConfigurePrimaryHttpMessageHandler(h => httpClientHandler);若要禁用安全证书的验证,但当执行太多请求时,我会收到以下异常:
无法访问已释放的对象。对象名:'SocketsHttpHandler‘。
我现在用这种方式构建我的httpclient
HttpClient client = _httpClientFactory.CreateClient("ignoreSSL");在进行测试时,这种方法无需httpclientfactory就可以解决。
HttpClient ad = new HttpClient(handler, false);对于比我所寻找的更多的东西,我找不到如何告诉httpclientfactory不要让处理程序处理?
发布于 2019-01-18 15:40:26
造成此问题的原因是,所有请求都使用单个HttpClientHandler实例。管理、池和循环处理程序是HttpClientFactory的工作。
看起来实际的问题是如何在使用HttpClientFactory时禁用证书验证。这需要配置它使用的客户端处理程序。
如文件所示 --这是使用ConfigurePrimaryHttpMessageHandler方法完成的。根据该方法的说明:
备注 每次调用消息处理程序时,委托都应该返回消息处理程序的一个新实例。
由该方法创建的处理程序将添加到处理程序池中,并由其他处理程序使用,例如Polly的重试处理程序。HttpClientFactory将回收旧的处理程序来处理DNS注册更改。
代码应该如下所示:
services.AddHttpClient<HttpWrapper>("ignoreSSL")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
};
});https://stackoverflow.com/questions/54256792
复制相似问题