Miroslav Holec
Premium

Nefunkční stream rendering v App Service

Miroslav Holec   7. května 2024  update 9. ledna 2025

Stream Rendering je power feature v Blazoru. Všude funguje spolehlivě, ale v Azure App Service z neznámého důvodu ne. Po delším zkoumání jsem zjistil, že podobný problém má v různých situacích mnoho vývojářů. Když Stream Rendering nefunguje, čeká se na provedení celé metody OnInitializedAsync a teprve poté se aktualizuje DOM finálním HTML.

Jednotný lék je přenastavit Content-Encoding. Na začátek middleware pipeline jsem tedy přidal middleware, který hlavičku nastaví (nemá to dále nemá vliv na statické soubory, API response atd.). Hodnota identity indikuje, že se žádná komprese nepoužije.

Update 9.1.2025 - po zapojení nového StaticAssets middleware (v .NET 9) skrze MapStaticAssets() je nutné přidat podmínku, zda se nepoužívá komprese. Je to tu kvůli gzip & brotli kompresi u statických souborů.

public class ContentEncodingMiddleware(RequestDelegate next)
{
    public async Task InvokeAsync(HttpContext context)
    {
        var encoding = context.GetEndpoint()?.Metadata.GetMetadata<ContentEncodingMetadata>();
        if (encoding == null)
        {
            context.Response.Headers.Append(HeaderNames.ContentEncoding, "identity");
        }

        await next(context);
    }
}

Pokud někdo něco podobného řeší, další přičinou může být i response buffering, který je pro stream rendering též nežádoucí.

Miroslav Holec | Pomáhám vývojářským týmům správně používat technologii .NET a vytvářet špičkové aplikace a REST služby.