Proč se může ASP.NET stránka občas volat 2x a jak to opravit

17. 2. 2020, Vladimír Klaus, přečteno 343x

ASP.NET/C#

U jednoho projektu jsem přidal logování některých akcí a jaké bylo moje překvapení, když se provádělo vždy 2x. Nejprve jsem si myslel, že mám nějaký problém v zápisu do databáze, ale pak se ukázalo, že se ASP.NET stránka volá 2x. Přitom po řadě pokusů a eliminací kódu nebyl pro to žádný důvod.

Z logovacích záznamů v SQL Server databázi bylo zřejmé, že jde o poměrně rychlé opakované volání (max. 0,1 vteřiny prodleva) a ani vizuálně nebylo patrné, že by se stránka načítala vícekrát, nějak problikla nebo něco takového.

Proč se může ASP.NET stránka občas volat 2x a jak to opravit, obr. 1

Zkusil jsem tedy stránku maximálně zjednodušit, ale i v podstatě prázdná stránka se volala dvakrát. Nepomáhalo spuštění bez debuggeru, nepomáhala výměna prohlížeče. Začal jsem tedy hledat na internetu a po několika falešných důvodech jsem narazil na ten správný – odkazoval jsem se na neexistující obrázek.

Konkrétně šlo o odkaz v šabloně stránky, který vypadal takto:

<div style="background:url(@Href(PageData["HlavniObrazek"]))">

A v případě testované stránky nebyl odkaz na "hlavní obrázek" vyplněn. Zdálo se mi to málo pravděpodobné, ale přesto se příčina potvrdila. Tento problém opravdu vyvolal opakované načítání stránky.

Po dalším pátrání a pokusech jsem si ověřil, že nemusí jít pouze o přesně tento problém, ale obecně – odkaz na nějaký neexistující nebo prázdný zdroj může podobné chování také způsobit. Mám na mysli třeba toto:

<img src="#" />
<script type="text/javascript" src=''></script>

V řadě případů nemusí jít o fatální problém ("jen" drobné zpoždění), ale v jiných může způsobit katastrofu – opakované zaznamenání dané akce v případě platby by asi nebylo příjemné. 😁 Stejně tak v případě náročnějších operací čekat dvojnásobnou dobu může být pro uživatele důvod k opuštění stránky.

Závěr, který z tohoto pro mě vyplynul je jasný – prověřit ostatní webové projekty i na takto nevinný problém, jako je chybějící odkaz na obrázek. A že nemusí jít o triviální věc, je asi patrné především v případech, když jde o dynamické generování odkazů.

Zdroje: