【问题标题】:.NET HttpClient does not timed out for in non console app.NET HttpClient 在非控制台应用程序中不会超时
【发布时间】:2019-05-02 04:02:47
【问题描述】:

我需要在防火墙后面的网络中运行 ASP.NET WebAPI (.NET Framework 4.6.1) 应用程序,并且我需要调用一些托管在该网络之外的 API。我可以在同一台机器上使用 Postman 访问这些 API,没有任何问题,但是 HTTP 客户端 GetAsync 方法超时并失败。

我已经使用 Visual Studio 模板创建了多个应用程序,并将以下代码放入其中(基本上没有什么需要模板代码和以下行):

 var c = new HttpClient();
 var r = await c.GetAsync("https://google.com");

以上代码适用于 .NET Framework 4.6.1 控制台应用程序,但在所有其他应用程序类型上都失​​败,包括:

  • ASP.NET Web 应用程序 .NET Framework 4.6.1
  • ASP.NET Core Web 应用程序 2.2
  • .NET Core 控制台应用程序 2.2

我也尝试使用下面的代码绕过 SSL 证书,但没有任何运气。

httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };

肯定是网络上的某些原因导致了这种情况,但是,这是如何在 .NET Framework 而不是其他任何框架中工作的? 我已经厌倦了像 google.com 这样的公共网站,我得到了同样的结果。 有没有人遇到同样的问题?关于如何调试它的任何建议?

【问题讨论】:

  • 您收到的确切错误是什么?它总是在一段时间后发生还是会有所不同?增加超时是否有意义?您希望收到多少数据? Postman 运行这些请求需要多长时间?
  • 我的疯狂猜测是,您正在以自己的身份运行控制台应用程序,但将 Web 应用程序作为某种服务帐户身份运行,并且该身份缺少配置的某个方面,例如它无权访问出站代理服务器或连接所需的根证书。但这只是一个猜测。这里没有太多的信息。
  • 邮递员的响应只有几毫秒。我真的在尝试 google.com,连接速度非常快。
  • @JohnWu 我还没有托管这个应用程序。 .net 核心也是一个控制台应用程序,但它失败了。
  • @mason 错误信息为:“连接尝试失败,因为连接方在一段时间后没有正确响应或建立的连接失败,因为主机没有响应”

标签: c# asp.net dotnet-httpclient


【解决方案1】:

我可以找到 .NET Framework Web 应用程序的解决方案。通过将以下添加到 web.config,将设置默认代理。

<system.net>
   <defaultproxy/>
<system.net>

参考: Configure the Hypertext Transfer Protocol (HTTP) proxy server

但我还没有适用于 .NET Core 应用程序的有效解决方案。

2020 年 4 月 9 日更新
我可以在 .NET Core 2.x 中解决此问题,但设置配置,但此问题在 .NET Core 3.x 中已修复。现在HttpClient默认使用默认代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多