asp.net - 无法从传输连接读取数据:操作已取消
问题描述
我们有一个 .NET WorkerService,它在事件中心的后台挂起触发器中运行,以将数据推送到 API Web 服务,但我们遇到了这个问题:
有什么想法可能导致这种情况吗?
ExceptionSource: "System.Net.Http", ExceptionType: "System.Threading.Tasks.TaskCanceledException: The operation was canceled.
System.IO.IOException: Unable to read data from the transport connection: Operation canceled.
System.Net.Sockets.SocketException (125): Operation canceled
End of inner exception stack trace ---
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
at System.Net.Security.SslStream.<FillBufferAsync>g__InternalFillBufferAsync|215_0[TReadAdapter](TReadAdapter adap, ValueTask`1 task, Int32 min, Int32 initial)
at System.Net.Security.SslStream.ReadAsyncInternal[TReadAdapter](TReadAdapter adapter, Memory`1 buffer)
at System.Net.Http.HttpConnection.FillAsync()
at System.Net.Http.HttpConnection.ReadNextResponseHeaderLineAsync(Boolean foldedHeadersAllowed)
at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Client.MyClient.UpdateAsync(DataRequestUpdate DataRequest, CancellationToken cancellationToken) in /src/Client/Client.cs:line 1232
at Client.Repository.Update(Request data) in /src/Client/Repository.cs:line 32
at WorkerService.EventProcessor.Update(UpdateRequest request) in /src/WorkerService/EventProcessor.cs:line 390", Message: "The operation was canceled." }
解决方案
默认的 .NET httpclient 超时为100 秒。如果您的客户端耗时超过 100 秒,则会导致上述错误。要解决这个问题,只需增加超时值。
HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(10); //Eg. 10mins timeout
推荐阅读
- azure - azure-pipelines.yml 中的多个单独触发器
- java - 在 HTML 中打印结果的 Java Rest 应用程序问题
- python-3.x - 如何拥有 tf.zero 形状的大矩阵
- javascript - JQuery使用rgb查找样式以替换为十六进制颜色
- javascript - 如何访问 Safari 中的 redux 商店?
- python - Base64 图像比较
- angular - 由于空间问题,日期选择器(覆盖)顶部隐藏
- angular - Angular - 链接到 ViewChild 的函数执行两次
- c++ - 将返回类型专门用于 void 或 const 左值引用
- makefile - 清理目标文件后Make不会重新编译