从.net 5升级到.net 6会导致通过web客户端进行的外部http调用超时



我们决定将我们的网站Asp.net核心代码从.net5升级到.net6,我们只需将web应用程序的"目标框架"从.net5。没有编译错误,我们在开发环境中对其进行了测试,一切似乎都很好。根本没有代码更改,以前.net5应用程序已经运行了好几个月,没有出现任何问题(在此之前,.net框架4.8(

当我们将应用程序部署到实时生产环境中时,几分钟内我们注意到外部调用(对https端点的调用,通常类似REST(的速度减慢,我们记录任何耗时超过5秒的调用,在几分钟内,所有调用都从慢变为超时(20秒(。

我们正在使用System。网WebClient用于我们所有的调用,据我所知,它现在在.net6中已经过时了,然而,我不希望这会突然改变行为,即使如此,我们也试图更改为HttpClient,这是推荐的方法,但结果相同。

我觉得我一定错过了一些真正重要的东西,我们刚刚升级了目标框架并重新部署,现在WebClient进行的所有调用最终都超时了。感觉就像一个";资源耗尽";问题,在代码中,由于速度减慢然后超时,但我无法解释这里发生了什么。

需要明确的是,我们没有做任何特别的事情,只是通过WebClient为每个用户调用大约3个外部服务,而且我们在高峰期每分钟可能有100个用户,以前没有超时。

任何可能导致超时的指针都将不胜感激。

我想时间会告诉我们这是否是答案,但我们将所有调用更改为使用DownloadStringTaskAsyncUploadStringTaskAsync,即所有从阻塞到异步的调用都在等待,24小时后,我们在满负荷的实时环境中没有看到相同的行为。

为什么一个使用.net 5内核的网络应用程序不会出现这些问题,而.net 6会出现这些问题?这很难理解。就上下文而言,我们并没有处于疯狂的高负载下,我们谈论的峰值可能是每分钟150个用户,但这就是我们所看到的。

也许这是我们设置的特定内容,但我写这篇文章是为了避免其他人将来调试这个问题的痛苦。

这是可疑和意外的。如果你有HttpClientrepo,你能把它发布在GitHub上吗https://github.com/dotnet/runtime/issues?(理想情况下,我们可以在本地运行最少的repo进行调试(

如果您的repo无法转移到另一台机器,或者需要您无法公开的特定端点,我们可能必须指导您进行一些本地调试。。。

-Karel(.NET网络团队(

最新更新