.net - 处理多个大文件时来自 HTTP 客户端的套接字异常
问题描述
我的代码在启动时创建了一个 HTTP 客户端,该客户端在应用程序的整个生命周期中都使用。它按顺序处理文件,从存储帐户流式传输内容,并通过 HTTP 请求将其发送到外部服务进行内容分析。然后它将分析的内容上传到另一个存储帐户。
这可以工作好几个小时,但突然在 httpClient.SendAsync 方法上遇到 System.Net.Sockets.SocketException。发生这种情况时,处理的每个后续文件也会因 System.Net.Sockets.SocketException 而失败。我发现只有在多个大文件排队等待处理时才会发生这种情况,这让我认为可能是某些资源没有正确处理。
我的问题是为什么会发生这种情况,我该如何从这种情况中恢复过来?
重新启动应用程序可以解决问题,直到引发另一个 System.Net.Sockets.SocketException,此时模式会继续(每个后续文件都会失败,直到重新启动应用程序)。
var multipartContent = new MultipartFormDataContent();
// blobStream is of type Stream and is passed into this method
using (var byteArrayContent = new ByteArrayContent(blobStream.CopyToBytes()))
{
multipartContent.Add(byteArrayContent, Upload, Path.GetFileName($"{documentId}.{fileExtension}"));
var request = new HttpRequestMessage(HttpMethod.Post, TikaForm) { Content = multipartContent };
request.Headers.Add(Accept, TextPlain);
var response = _httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false).GetAwaiter().GetResult();
var responseLength = response.Content.Headers.ContentLength.HasValue ? (int)response.Content.Headers.ContentLength.Value : -1;
string text;
using (var stream = response.Content.ReadAsStreamAsync().ConfigureAwait(false).GetAwaiter().GetResult())
{
byte[] dataBytes = new byte[responseLength];
stream.Read(dataBytes, 0, responseLength);
// Read text from byte array and trim the leading and trailing whitespace.
text = Encoding.UTF8.GetString(dataBytes, 0, dataBytes.Length).Trim();
using (var subStream = new MemoryStream(Encoding.UTF8.GetBytes(text)))
_blobStorage.UploadBlob(targetPath, subStream).ConfigureAwait(false).GetAwaiter().GetResult();
}
}
解决方案
推荐阅读
- c# - 如何在画布中制作控件内容下方的装饰器?
- android - Error cannot find symbol variable FileProvider package android.support.v4.content does not exist
- cloud - 短期内高流量的选择是什么?
- python - 如何用随机数替换列表中的元素
- scala - 将 Dataframe 的 ListBuffer 转换为单个 Dataframe Spark Scala
- search - 使用哪种语言
- schema.org - How to markup an electricity rate in Schema.org?
- sql - 获得跨数据库的完成级别分布
- python - 平均颜色有点不对。(np.mean())
- python - 属性错误:“int”对象没有属性