Разделенный ответ функции Azure не может быть загружен в Chrome ERR_INCOMPLETE_CHUNKED_ENCODING

Я создаю функцию Azure, которая возвращает фрагментированный ответ (с использованием await response.WriteAsync(...)). Когда я открываю URL-адрес функции Azure в Chrome, я получаю сообщение об ошибке: Chunked: 1 GET http://localhost:7071/api/Chunked net :: ERR_INCOMPLETE_CHUNKED_ENCODING 200 (ОК)

Эта ошибка возникает в большинстве случаев, но иногда я получаю правильный результат. Однако, когда я открываю тот же URL-адрес из Edge, ответ всегда загружается правильно. Я запускаю код локально из Visual Studio 15.8.7, версия среды выполнения функции: 2.0.12134.0,

Я создал минимальное воспроизведение:

[FunctionName("Chunked")]
public static async Task Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    var res = req.HttpContext.Response;
    res.StatusCode = 200;
    var token = " Lorem ipsum ";
    await res.WriteAsync(token);

    for (int i = 0; i < 100; i++)
    {
        token += token;
        if (token.Length > 2000)
            token = " Lorem ipsum ";
        await res.WriteAsync(i + token + "\n");         
        await Task.Delay(10); // Simulate wait for another record
    }
}

Мой код более сложный, потому что он читает контент из базы данных, но я смоделировал его с помощью Task.Delay.


person Jovan MSFT    schedule 21.10.2018    source источник
comment
Кажется, не связано с временем выполнения функции, поскольку я не могу воспроизвести ваш код. Вы пробовали решения, связанные с Chrome?   -  person Jerry Liu    schedule 22.10.2018


Ответы (1)


ASP.NET:

Попробуйте установить для req.HttpContext.Response.BufferOutput значение false. Буферизация ответа может помешать правильному фрагментированию ответа.

Для ASP.NET Core это кажется подходящим:

private void DisableResponseBuffering(HttpContext context)
{
    IHttpBufferingFeature bufferingFeature = context.Features.Get<IHttpBufferingFeature>();
    if (bufferingFeature != null)
    {
        bufferingFeature.DisableResponseBuffering();
    }
}
person Sebastian Achatz    schedule 24.10.2018
comment
К сожалению, функции Azure создаются в стандарте .Net Core 2 / .Net, и буферный режим там недоступен: docs.microsoft.com/en-us/dotnet/api/. Я не могу воспроизвести это в стандартном ASP.NET, где я мог бы установить это значение. - person Jovan MSFT; 26.10.2018