Společná bussines vrstva pro IIS i konzolovou aplikaci?   zodpovězená otázka

C#, ASP.NET/IIS

Ahoj,

mám obecnou otázku co se týká návrhu webové aplikace a systémové úlohy.

V dot.netu mám v C# kódu vytvořené webové stránky, říkejme jim "burza". Data čtou z databáze MSSQL.

Dále mám v C# vytvořenou systémovou aplikaci "server.exe", která stále "žije" v paměti počítače a přepočítává data a ukládá je do MSSQL, které pak IIS poskytuje uživatelům.

A já bych chtěl pro lepší optimalizaci práce sdílet společná data (cache) ve společném paměťovém prostoru. Ne přes MSSQL. Když serverová úloha zapíše do cache, aby je ihned mohly číst IIS webové stránky.

Je řešením DLL? Nějaké společně sdílené? Jakási společná bussines vrstva?

Napadlo mě vše udělat v jednom webovém projektu, mít pěkně společné zdrojáky a "server.exe" naroubovat a spouštět v global.asax. Ale problém je, že IIS se čas od času restartuje. A to by se bohužel restartoval i server.exe, který musí běžet stále, kvůli přepočtům.

Snad jsem to vysvětlil srozumitelně, děkuji moc za jakoukoliv radu.

Zdeněk

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jestli jsem správně pochopil scénář, jde vám o vytvoření objektové cache, která bude sdílená mezi serverovou aplikací "server.exe" (dále budu označovat jako aplikační service) a webovou aplikací běžící na IIS (web).

Toto udělat lze určitě několika způsoby, ale nemusí to být úplně jednoduché. Jedna možnost je stručně následující:

-Objektová cache bude hostována v procesu běžícího aplikačního service.

-Na vlastní funkčnost to sice vliv nemá, ale aplikační servis by měl být ideálně aplikace typu NT Service (služba spouštěná přes Service Manager), a ne jen exe, které se musí spustit - pokud s tím nemáte zkušenosti, hledejte třídu ServiceBase:

http://msdn.microsoft.com/en-us/library/...

-V tomto procesu aplikačního service musíte vytvořit nějaké komunikační rozhraní, přes které se bude web (client) ptát na data. Můžete použít buď WCF nebo ASP.NET Web API (oboje lze self-hostovat uvnitř vlastní aplikace mimo IIS), případně nějakou jinou technologii pro cross-process komunikaci.

-Všechny požadavky (externí z webu, i interní pro vlastní potřebu aplikačního service) by používali sdílenou in-process in-memory objektovou cache, do databáze by šli jen pokud data v cache nejsou nebo jsou stará atd.

-POZOR ale na to, že aby tato cache byla efektivní musí být napsaná jako threadsafe a musí umět obsluhovat libovolné požadavky paralelně (ideálně s minimálním blokováním).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Moc děkuji za pěknou odpověď! Pomohl jsi mi se v tom zorientovat.

S vlákny už nějaké zkušenosti mám. To Web API mě zaujalo.

Takže udělám aplikační service s WebApi rozhraním, které bude celou dobu běžet v systému a k ní se bude web v IIS připojovat a zapisovat data přes rozhraní WebAPI.

Možná ještě sem napíšu nějaké otázky na Web API.

Ještě jednou děkuji.

Zdeněk

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ohledně ASP.NET Web API doporučuju shlédnout toto video:

http://wug.cz/zaznamy/224-ASP-NET-Web-AP...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback