Токен отмены в iis не срабатывает - PullRequest
0 голосов
/ 29 октября 2018

У меня есть API с .net core 2.1 и я использую токены отмены в действиях. Когда я запускаю проект с iis и делаю простой запрос в браузере, после того как я отменил его, он не работает должным образом и запускает все методы с токеном отмены, переданным им. Но когда я запускаю проект с использованием сервера kestrel, отмена запроса приводит к тому, что сервер работает должным образом. это почему?

    [HttpGet("get")]
    public async Task<IActionResult> GetSome(CancellationToken ct)
    {

        _logger.LogInformation("The slow Request Start");
        try
        {
            await Task.Delay(10_000, ct);
            _logger.LogCritical("Successful");
        }
        catch (Exception)
        {
            _logger.LogInformation("Task Cancelled");
        }
        var message = "The request finished";

        _logger.LogInformation(message);

        return NoContent();
    }

1 Ответ

0 голосов
/ 29 октября 2018

В настоящее время это невозможно при размещении ASP.NET Core до 2,1 (или более конкретно позади) IIS, отмена или потеря соединения не будут переданы приложению ASP.NET Core.

Сейчас он работает только при размещении / экспонировании напрямую через Kestrel или HTTP.SYS (ранее известный как Weblistener).

В ASP.NET Core 2.2 (из preview3 и более поздних версий) модуль AspNetCoreModule был обновлен для поддержки этой функции. Однако он ограничен хостингом IIS и не будет работать, когда IIS выступает в качестве простого обратного прокси.

См. Блог ASP.NET Core 2.2-preview3 .

Мы добавили поддержку способности обнаруживать разъединения клиента, когда вы используете новую модель внутрипроцессного хостинга IIS. Токен отмены HttpContext.RequestAborted теперь срабатывает при отключении клиента.

Однако имейте в виду, что хотя внутрипроцессная работа повышает производительность и снижает накладные расходы, это также означает, что вы можете иметь только одно приложение на пул приложений, размещенное как незавершенное, если я правильно помню.

...