Jedním z největších problémů webového vývoje jsou dlouho běžící úlohy zpracovávané na web serveru. Web servery na ně nejsou připraveny a neumí si s nimi dobře poradit. Připravil jsem seriál videí a příkladů, které radí, jak si s tímto fenoménem poradit. V tomto článku najdete souhrn všech dílů ve věcně logickém pořadí (které z různých důvodů neodpovídá pořadí, v jakém byly zveřejněny).

Zdrojové kódy příkladů

Všechny zdrojové kódy najdete v repozitáři NetUtilsDemo na mém GitHubu.

Předehra: Traceroute a ping

Pro dema jsem potřeboval nějaký příklad dlouho (sekundy, desítky sekund a déle) běžící úlohy. Většina reálných úloh tohoto typu jsou logicky věci dosti náročné a pro dema nevhodné, jako náročné databázové věci, generování reportů, práce s velkými objemy dat... Nicméně pro síťovou diagnostiku se používají příkazy ping a traceroute/tracert.

Jejich běh trvá dost dlouho, ale přitom jsou vlastně velice jednoduché. Jsou tedy ideálním příkladem pro dema. V následujícím videu vysvětluji jak fungují a jak je napsat v C#:

Úvod: Proč to chceme řešit a jak

Časově poslední vydaný díl seriálu je z hlediska věcného vlastně tím prvním. Vysvětluje totiž, proč vlastně vše děláme tak komplikovaně a prostě to neuděláme na web threadu web serveru.

Background workery a jejich hostování

Abychom si všechno nemuseli dělat sami, má .NET interface IHostedService a třídu BackgroundWorker, která slouží k hostování kódu, který ony dlouhé operace dělá. Ty lze pak hostovat různým způsobem.

První video popisuje, jak napsat vlastní Windows Service (službu) a použít ji pro hostování našeho background workeru:

Druhé video pak, jak background worker hostovat přímo ve webové aplikaci ASP.NET Core:

Windows Services a jejich identita

První video této části je tady pro pořádek. Netýká se přímo background workerů, ale popisuje jak můžete webovou aplikaci psanou v ASP.NET Core rozjet jako Windows Service, bez nutnosti instalovat a používat IIS:

Druhé se pak zabývá nastavením identity Windows Service:

Michael Grafnetter mi ukázal lepší způsob práce s identitou Windows Services, který jsem neznal, Virtual Service Identity. Jím se zabývá třetí video tohoto bloku:

Co se jinam nehodilo

Poslední video, které s tématem souvisí, byť úplně nezapadá do série, je představení knihovny Hangfire. Tu lze chápat jako jistou alternativu k background workerům. Má velice široké možnosti, i když vyžaduje ne zcela triviální nastavení databázového úložiště.

Co plánuji do budoucna

Často v této sérii mluvím o použití front, ale vlastně jsem žádnou nepředvedl, resp. realizoval jsem ji pomocí tabulky v databázi, což je řešení sice časté, ale svým způsobem limitující. Plánuji udělat videa o používání různých druhů front jak lokálně, tak v prostředí Microsoft Azure.

Když už jsme u cloudu, tak pro úlohy na pozadí lze s výhodou použít koncept Web Jobs, takže chci udělat video i o něm. V tomto kontextu je zajímavý i serverless koncept, Azure Functions. O tom vůbec nic nevím, ale už dlouho ho mám na seznamu věcí které se chci naučit. Pokud je běžně používáte a chcete mi s tvorbou videa o nich nějakým způsobem pomoci, tak neváhejte a kontaktujte mne!