首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AspNet Core 3 HttpClientFactory: TaskCanceledException

AspNet Core 3 HttpClientFactory: TaskCanceledException
EN

Stack Overflow用户
提问于 2019-07-15 13:59:59
回答 1查看 872关注 0票数 1

我在Azure Kubernetes服务中使用了一个aspnet核心3反向代理,它松散地基于ProxyKit,它以前在以前的集群中工作得很好。在新集群上(我唯一能看到的区别是旧集群使用kubenet,新集群是一个蔚蓝的虚拟网络),当上游请求花费超过几秒钟的时间时,我经常在HttpClient.SendAsync上获得HttpClient.SendAsyncs。

这是引发异常的相关方法:

代码语言:javascript
复制
return await _httpClient.SendAsync(
                    UpstreamRequest,
                    HttpCompletionOption.ResponseContentRead,
                    HttpContext.RequestAborted)
                    .ConfigureAwait(false);

HttpClientHttpClientFactory使用类型化AddHttpClient中间件提供。

到目前为止我尝试过的事情:

  • 显式设置HttpClient的30秒超时
  • 不将任何CancelationToken传递给SendAsync方法
  • 按照这篇文章中的建议实现自定义超时处理

在此之前,HttpClientFactory就是这样配置的:

代码语言:javascript
复制
var httpClientBuilder = services
                .AddHttpClient<ProxyKitClient>()
                .ConfigurePrimaryHttpMessageHandler(sp => new HttpClientHandler
                    {
                        AllowAutoRedirect = false,
                        UseCookies = false
                    });

这就是现在的配置:

代码语言:javascript
复制
var httpClientBuilder = services
                .AddHttpClient<ProxyKitClient>(o => o.Timeout = Timeout.InfiniteTimeSpan)
                .ConfigurePrimaryHttpMessageHandler(sp => new TimeoutHandler
                {
                    InnerHandler = new HttpClientHandler
                    {
                        AllowAutoRedirect = false,
                        UseCookies = false
                    }
                });

这种行为丝毫没有改变。

如何确保HttpClient等待上游请求完成?Kestrel和HttpClient默认超时比当前中止的请求高得多。

顺便提一下,当我恢复到aspnet核心2.2时,行为完全相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 12:37:17

我评论说:

当客户端关闭连接时,会出现类似SendAsync之类的任务取消。所以,我觉得你找错地方了。您需要弄清楚客户端为什么过早地关闭连接。

因此,OP能够确定这个问题与Azure应用程序网关有关:

说得通,你说的完全对。一整天都在拔我的头发,罪魁祸首是Azure应用程序网关,请求超时时间为1秒。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57041377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档