0

下面的代码在 .NET 控制台应用程序中工作,但在 .NET 核心控制台应用程序中不工作。

在 .NET Core 控制台应用程序中,我收到错误消息

The operation was canceled

而且InnerException

Unable to read data from the transport connection: The I/O operation has been aborted because of either a thread exit or an application request
var client = new HttpClient();
            
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "https://www.nseindia.com/option-chain");
httpRequestMessage.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
httpRequestMessage.Headers.Add("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
httpRequestMessage.Headers.Add("Accept-Language", "en-us,en;q=0.5");
httpRequestMessage.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
var response = await client.SendAsync(httpRequestMessage);
4

1 回答 1

1

选项 1 - 增加超时

在查看此问题时,我的第一个倾向是建议 .NET Framework 与 .NET Core/.NET 的默认超时不同。我查看了HttpClient.Timeout此处此处)的文档,默认超时时间相同:100 秒。

我打算在这种情况下建议增加价值。即使现在知道默认值是相同的,我还是建议增加该值。可能是在实现和/或您如何从两个不同的客户端到达目的地方面存在足够多的其他差异,因此更改超时可能是有意义的。

所以试着设置TimououtTimeSpan.FromMinutes(5),看看你在哪里。这里有一些其他资源

选项 2 - 使用 IHttpClientFactory

您的代码表明您正在创建一个客户端并在某个范围内一次性使用它,并建议您在应用程序的整个生命周期内都没有使用它。如果这是真的,您将遇到诸如套接字耗尽之类的问题。

虽然该链接谈到了HttpClient没有遇到问题的原始 .NET Framework,但我建议您遵循该链接的建议并使用它IHttpClientFactory创建您的客户端。可能是您针对原始版本“编码为错误”,而 .NET Core 版本/做事方式已经暴露了这一点。

于 2021-07-24T15:40:58.997 回答