Refit не возвращает результат при многократной загрузке файла - PullRequest
0 голосов
/ 29 февраля 2020

Я использую этот код для загрузки сжатого файла с 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");
}
...