提问人:Ajayakumar GS 提问时间:7/24/2021 最后编辑:Ajayakumar GS 更新时间:8/3/2021 访问量:8926
.NET:无法从传输连接读取数据:I/O 操作已中止
.NET: Unable to read data from the transport connection: The I/O operation has been aborted
问:
以下代码在 .NET 控制台应用程序中有效,但在 .NET Core 控制台应用程序中不起作用。
在 .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);
答:
2赞
Kit
7/24/2021
#1
选项 1 - 增加超时
在研究这个问题时,我的第一个倾向是建议 .NET Framework 与 .NET Core/.NET 的默认超时不同。我查看了(此处和此处)的文档,默认超时是相同的:100 秒。HttpClient.Timeout
在这种情况下,我建议增加价值。即使现在知道默认值是相同的,我还是建议增加该值。可能是在实现和/或您从两个不同的客户端到达目的地的方式中存在足够多的其他差异,因此更改超时可能是有意义的。
所以试着设置说,看看这能把你带到哪里。以下是一些其他资源Timouout
TimeSpan.FromMinutes(5)
- 回答有关解释错误的邮件的问题
- 使用 HttpClient 更好地处理超时可能会有所帮助
选项 2 - 使用 IHttpClientFactory
您的代码指示您正在创建一个客户端,并在某个范围内一次性使用它,并建议您在应用程序的生存期内不使用它。如果这是真的,您将遇到套接字耗尽等问题。
虽然该链接讨论了您没有遇到问题的原始 .NET Framework,但我建议您遵循该链接的建议,改用该链接来创建客户端。可能是针对原始版本“编码为 bug”,而 .NET Core 版本/做事方式已公开了这一点。HttpClient
IHttpClientFactory
评论