Я использую этот код для загрузки сжатого файла с asp. net главный сервер
var content = await service.DownloadZippedImage(filing.Id).ConfigureAwait(false);
// IServiceAPI.cs
[Get("/filings/download/{filingId}")]
Task<HttpContent> DownloadZippedImage(int filingId);
В реальном коде я вызываю DownloadZippedImage
несколько раз во время выполнения, длину содержимого составляет около 1 МБ, но в некоторых случаях refit не возвращает результатов, поэтому я отлаживаю сервер, но на стороне сервера ошибки нет, сервер фактически отправил файл.
Поэтому я пытаюсь выполнить этот код :
var content1 = await service.DownloadZippedImage(filing.Id).ConfigureAwait(false);
var content2 = await service.DownloadZippedImage(filing.Id).ConfigureAwait(false);
var content3 = await service.DownloadZippedImage(filing.Id).ConfigureAwait(false);
var content4 = await service.DownloadZippedImage(filing.Id).ConfigureAwait(false);
var content5 = await service.DownloadZippedImage(filing.Id).ConfigureAwait(false);
var content6 = await service.DownloadZippedImage(filing.Id).ConfigureAwait(false);
При успешном восстановлении выполните несколько строк (2 или 3), но в конечном итоге они будут зависать, не возвращая ничего на следующей строке, пока не истечет время ожидания.
Этот симптом не возникал при использовании HttpClient
для загрузки файла:
private static async TaskHttpContent> DownloadZippedImageAsync(int filingId)
{
var url = $"http://{Settings.Default.ImagePath}/{filingId}";
using (var client = new HttpClient())
{
var uri = new Uri(url);
var response = await client.GetAsync(uri).ConfigureAwait(false);
return response.Content;
}
}
Это код контроллера на сервере:
[HttpGet("download/{filingId}")]
public async Task<IActionResult> DownloadZip(int filingId)
{
var filing = await _context.Filing.FindAsync(filingId);
if (filing == null)
return NotFound();
using var ms = new MemoryStream();
using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
for (int page = 1; page <= filing.PageCount; page++)
{
var name = $"{filing.TypeId}_{filing.Id}_{page}.jpg";
var file = @$"{_settings.FilingPath}\{filing.EmployeeId}\{name}";
if (!System.IO.File.Exists(file))
return NotFound();
archive.CreateEntryFromFile(file, name, CompressionLevel.Fastest);
}
}
return File(ms.ToArray(), "application/zip", $"filing_{filing.Id}.zip");
}