【发布时间】:2021-02-15 13:01:44
【问题描述】:
问题是,当我将await 放在HttpClient.GetStreamAsync() 之前时,它不会返回任何内容,Visual Studio 会自行挂起,只要我决定停止调试,就不会返回任何内容。当我尝试使用.GetAwaiter().GetResult() 时,它会提示我在this 问题上显示的错误,不幸的是没有产生任何解决方案。
这些错误会导致什么结果? TLS 问题是不确定的。网络团队确保我试图从中获取结果的 api 的地雷请求没有被阻止,并且对方确认他们也没有阻止我们的请求。可以确认这一点,因为 Postman 请求与 api 配合得很好。我使用了HttpClient 和WebRequest 提示同样的错误。等待甚至不会导致错误,它只是闲置......
为什么我会遇到这个问题?我怎样才能克服它?任何帮助表示赞赏。
(我尝试过的代码和solutions可以在this我的问题中找到。
【问题讨论】:
-
所有错误都指向服务器的问题。您无法在客户端解决此问题。您只能为您的操作添加超时,这样您就不会永远等待。顺便说一句,阻止异步操作是个坏主意。通过允许过时的算法来削弱 TLS 加密也是如此
-
@PanagiotisKanavos,我创建了一个工作正常的 .Net Framework 4.7.2 项目和一个 .Net Core 3.1 项目。一点都不麻烦。但是在 .Net Framework 4.7.2 上运行的项目不知何故无法按预期工作。此问题不可能是服务器问题。
-
创建一个新的 HttpClient 实例也很糟糕,这个类是线程安全的并且意味着可以重用。否则,您最终会耗尽所有可用的套接字,而这可能会导致问题。检查You're using HttpClient wrong and its destabilizing your software。
-
您没有提供足够的信息,所以人们只能猜测出了什么问题。特别是在 this 问题中。 HttpClient 没有损坏。如果有流,
GetStreamAsync会打开它。所以要么服务器被阻塞,要么客户端代码以某种方式最终阻塞了自己。 HttpClient 没有损坏。您在原始问题中发布的代码虽然有严重的错误 - 阻止异步调用、削弱安全性、创建新的 HttpClient 实例并可能耗尽可用的套接字 -
我想
Postman可以使用您的公司代理设置,而.Net 应用程序可能会尝试直接建立它。看起来像是您的环境有问题,而不是代码。
标签: c# .net async-await dotnet-httpclient