WebAPI aplikační server a dlouhotrvající operace rubrika: Programování: .Net
Zdravím ve spolek,
popíšu situaci:
- mám desktop aplikaci (WPF), která se připojuje přes WebAPI (http/s) na aplikační server
- aplikační server běží na IIS jako WebAPI (ASP.NET/MVC)
- je potřeba implementovat nějakou dlouho trvající úlohu (desítky minut až jednotky hodin)
- desktop WPF vyvolá zpracování této úlohy, požadavkem na aplikační server
- desktop WPF se může nyní klidně vypnout a zpracování úlohy na app. serveru musí pokračovat
- desktop WPF musí mít možnost dotázat se app. serveru na stav úlohy = neběží, běží, hotovo,...
Uvažuji o tomto řešení:
desktop -> app. server -> "working server"
Kde "working server" je můj pracovní název na aplikaci typu windows service, čekající na požadavky z "app. serveru".
App. server by tedy v případě této dlouhodobé úlohy pouze předal požadavek (WCF) ke zpracování na "working server". Ten by pak ve vlákně začal pracovat. V případě potřeby, může spustit další vlákna s dalšími dlouhodobými úlohami. Bude také schopen odpovídat na dotazy o stavu zpracovávaných úloh.
Důvody tohoto řešení:
- myslím si, že aplikační pool IIS není pro takovéto úkoly vhodný
- nebudu zbytečně vytěžovat aplikační pool IIS
- potřebuji zajistit zpracovávání úlohy i v případě ukončení/odpojení klientské aplikace
- mohu tímto způsobem delegovat dlouhé a náročné operace třeba i na jiný stroj
Co si o tom myslíte?
Máte nějaké jiné návrhy, zkušenosti?
Díky za info.
Ja s tym mam skunosti.
-
IIS by to malo teoreticky zvladat no musis na nom zakazat recyklovanie AppPoolu (zvladalo tasky v desiatkach minut).
Ale uz len kvoli bezpecnosti a moznosti rozlozenia zataze by som na IIS nechal len WebApi a tie dlhotrvajuec ulohy spustal na windows sluzbe. - Na komunikaciu medzi web serverom a windows sluzbou pouzi nejaku message Queue, vo Windose mas rovno MSMQ, alebo vies pouzit MS SQL Service Brooker.
Na frontu uloh vies pouzit aj tabulku v datbaze, ale na to treba trochu dovtipu a pohrat sa s SQL-kom.
Moje rienie nepouzivalo fronty ale databzu, do ktorej si aplikacia ktora spracovala ulohy znacila, ktore ulohy uz spracovala a v akom su stadiu (databaza patrila web serveru). Web Server tieto data len serviroval pouzivatelovi (pollovanie). Dnes by som rozhodne siel bud do MSMQ (alebo odboby v Azure), ci nejakej kniznice na spravu uloh - napriklad Hangfire (aj ked tie su skor pre kratsie ulohy).
Plus urcite bude niekto namietat re nemas pouzit REST ale websokety, no myslim si, ze na ulohy trvajuce desiatky minut to nie je potreba.
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře