c# - c# HttpClient - 从传输流中接收到意外的 EOF 或 0 字节
问题描述
我通过使用HttpClient
并行下载5个文件从.net core 3.1应用程序连接到服务器,但是当我通过该方法发送http请求SendAsync
并尝试读取服务器通过响应流发出的字节时,我得到以下例外:
从传输流接收到意外的 EOF 或 0 字节
以下代码用于发送 Http 请求消息以下载文件:
// Send DownloadRequest
public async Task RequestDownload(string fileid, string tokenauth, CancellationToken cancellationToken = default)
{
// create request message
var request = GetRequest(fileid, tokenauth);
// create createhttpclient
HttpClient _client = HttpClientFactory.CreateHttpClient();
// send request
var response = await _client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
// get response stream
using (var responsestream = await response.Content.ReadAsStreamAsync())
{
using(Stream copystream = new FileStream(fileid, FileMode.Create, FileAccess.Write, FileShare.Write))
{
responsestream.CopyTo(copystream);
}
}
var ausresult = await ParseDownloadResponse(response);
}
构建方法HttpRequestMessage
:
// Create httpRequestMessage
public static HttpRequestMessage GetRequest(string fileid, string authorizationtoken)
{
// Build uri connection
var uri = new System.Uri("https://www.downloadserver.com/GetFile");
var strfieldid = "{\"fileId\":\"" + fileId + "\"}";
var body = Encoding.UTF8.GetBytes(strfieldid);
var request = new HttpRequestMessage()
{
Method = HttpMethod.Post,
RequestUri = uri,
Content = new ByteArrayContent(body)
};
request.Headers.TryAddWithoutValidation("Authorization", authorizationtoken);
return request;
}
该HttpClient
对象为每个下载请求重用 (5),因此HttpClient
并行使用相同的实例,除了 http 客户端被初始化如下HttpClientHandler
:
创建方法HttpClient
:
// Get HttpClient
public static HttpClient CreateHttpClient(int timeout)
{
if (_client == null)
{
// create http handler to allow Auto Redirect
var handler = new HttpClientHandler()
{
AllowAutoRedirect = true,
UseProxy = false
};
// create httpclient
_client = new HttpClient(handler);
_client.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
_client.DefaultRequestHeaders.Accept.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
return _client;
}
最后当我下载单个文件时,没有产生异常,下载成功完成,但是当所有5个文件同时并行下载时,出现异常Received an unexpected EOF or 0 bytes from the transport stream。
任何想法将不胜感激。
最好的
解决方案
推荐阅读
- python - 为什么 break 语句在这里不起作用?
- google-cloud-platform - 如何向 GCP 云调度程序作业添加属性?
- amazon-web-services - 将 CSV 读入 AWS Glue 并加入来自 Data Catalog 的数据
- arrays - jayway jsonpath过滤内部json数组
- c# - 如何在 C# 中访问计时器内的图形?
- database-design - 一个公司的不同业务的一个或多个事实表?
- r - 以纯文本形式获取日期时间标题
- sql - 根据 SQL 中 2 个不同表的条件创建新列
- python - 如何提取引号之间的文本并替换它?
- azure - 如何显示受 Azure AD 企业应用程序级别限制的用户定义消息 + ASP.Net Core