Nežádoucí recyklace ASP.NET aplikace při změně vnitřní adresářové stuktury   otázka

VB.NET, ASP.NET WebForms

Dobrý den,

mám otázku ohledně nežádoucí recyklace ASP.NET aplikace, ke které dochází při změně adresářové struktury.

Moje aplikace vypadá po vypublikování zjednodušeně asi takto:

- MyApplication (kořenový adresář aplikace)

- bin (obsahuje .dll po vypublikování)

- styles (obsahuje .css soubory)

- jsripts (obashuje jquery a .js soubory)

- webforms (obsahuje .aspx soubory)

- temp (obsahuje dočasné soubory uživatelů)

global.asax

web.config

default.html

Problém vzniká v adresáři "/temp". Tento adresář je po spuštění události application_start prázdný. Ve chvíli, kdy se do aplikace přihlásí první uživatel, vytvoří se uvitř adresáře "temp" podadresář s GUID jeho relace. Pokud uživatel uploaduje nějaký soubor do aplikace, tak se nahraje právě do této jeho podsložky, kde je s ním možné dále pracovat. (Měnit pomocí aplikace obsah, importovat z něho do databáze, apod.)

Doposud je vše v pořádku. Problém nastává až ve chvíli, kdy se uživatel odhlásí.

Jelikož nechci, aby se mi na aplikačním serveru skladovaly již nepotřebné soubory a složky, tak jsem na událost, při které se uživatel odhlašuje, navázal odstranění celého jeho podadresáře, který byl při jeho přihlášení dynamicky vytvořen.

A zde právě docházi k nechtěné recyklaci aplikace:

Sub Logout(UserGUID As String)
    Dim Path As String = HttpContext.Current.Server.MapPath("~/temp/" + UserGUID)
    If System.IO.Directory.Exists(Path) Then
        System.IO.Directory.Delete(Path, True)
    End If
End Sub

Zajímavé je, že pokud uživatel do adresáře nic nenahrál, tak se při jeho odhlášení adresář odstraní a k recyklaci aplikace nedojde.

Je možné nějak v tomto případě zabránit v recyklování aplikace?

Chápu, že pokud něco změnim v adresáři bin, nebo v souboru web.config, tak se aplikace musí znovu zkompilovat. Ale pokud byly soubory a složky dynamicky vytvořené až během životních cyklů aplikace, tak proč by neměly jít také odstraňovat?

Předem děkuji za jakoukoli radu.

Petr

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

zdravicko,

koukal jste do App Pool recykle event logu? Ten by rekl jsite vice.. Je mozny, ze jen spatne detekujete pricinu,.. Bezne na menu souboru, ktere nejsou ve slozce BIN/APP_CODE nebo v rootu webu vubec nereaguje...

myslim si tedy, ze ve skutecnosti pri uploadu udelat neco jeste jineho a treba pretizite pridelenou pamet atp... kouknete do event logu, ten vam to povi, proc k recyklaci dochazi ;-)

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

Zdravím,

do EventLogu se nic nezapíše... vidím jen starší informace že "pracovní proces fondu aplikací byl ukončen kvůli neaktivitě". Ale pokud schálně vyvolám recyklaci víše popisovaným způsobem, nic se do EventLogu nezapíše ... pokud se tedy dívám na správné místo:

Správa počítače/systémové nástroje/prohlížeč událostí/vlastní zobrazení/server roles/web server/zdroj: was

Při uploadu se nic nestane, to je v pořádku. K recyklaci dojde pokud odstraním adresář, který uvádím výše v kódu a který jsem svázal s procedurou odhlášení uživatele. Pokud výše uvedený kód vyjmu, tak odhlášení uživatele proběhne standardně a k recyklaci nedochází. Takže problém opravdu musí vzniknout při změně adresářové struktury.

Petr

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

APP Recykling event log musite obcas zapnout..

http://stackoverflow.com/a/305966

Jeste me napada jedna vec,.. Nezapomnel jste na IISku prepnout aplikace z .NET 2.0 na 4ku? Myslim apppool.

2.0 totiz delala prave todle.. kdyz jste zmenil subdirectory, tak recyklovala..- Musel jste tedy tuto menici se strukturu budto dat do App_Data (ktera je ignorovana), nebo udelat fs LINK

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

Zdravím,

Event log mám zapnutý... i podle odkazu, který posíláte by se události do logu zapisovat měly, ... ale asi nezapisují... což mě moc nepřekvapuje, protože od té doby co jsem byl nucen opustit WinXP a nainstalovat si Win8 si systém dělá a nedělá jen to co se mu hodí :)

Ještě si zkusím vygooglit nějaký způsob, jak zachytit důvody recyklace a zapsat je pomocí StreamWriter do poznámkováho bloku.

Ohledně verze .NET mám web spuštění na verzi 4.5 (CLR v4.0.30319). A na localhostu mám IIS 8.5 (Windows 8.1)

Ještě se pokusím do zítra aplikaci vypublikovat na nějaký server.

P.

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

Dobrý den všem,

tak se mi bohužel nepodařilo nic moc zjistit ani poté, co jsem umístil aplikaci na server.

Recykling event log mám zapnutý, do eventlogu se zapisuje, že aplikace byla ukončena z důvodu nečinnosti nebo pokud ručně fond aplikace recykluji. O výše uvedeném problému ani čárka.

Doprogramoval jsem do aplikace zápis řádku do vlastního souboru events.txt při vyvolání události "application_start", "application_error" a "application_end".

Díky tomuto jsem jen zjistil, že pokud se snažím při odhlášení uživatele odstranit adresář "~/temp/UserGUID" který obsahuje nějaký soubor(y) tak je vyvolána událost application_end a application_start. Pokud je adresář prázdný, tak tyto dvě události vyvolány nejsou a fond aplikace jede dál bez recyklace.

Bohužel neumím do texťáku zapsat důvod... nevím jak ho zjistit.

Nenapadne vás někoho, nějaký důvod tohoto chování?

Používám IIS 8.5, .NET framework v4.0 (integrovaný), programovcí jazyk VB.

Možná je to jen nějaká úplně jednoduchá hloupost, která mi uniká.

Děkuji všem za jakýkoliv podmět. Petr

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

Dobrý den všem,

asi ne mi nakonec podařilo vyřešit tento problém nastavením atributu fcnMode do souboru web.config/system.web/httpRuntime:

<configuration>
  <system.web>
    <httpRuntime fcnMode="Disabled"/>
  </system.web>
</configuration>

Dle MS může atribut nabývat těchto hodnot:

Default - Pro každý podadresář aplikace vytvoří objekt, který sleduje podadresář. Toto je výchozí chování.

Disabled - Oznámení o změně souboru zakázána.

NotSet - Upozornění na změnu souboru není nastavena, takže aplikace vytvoří objekt, který sleduje každý podadresář. Toto je výchozí chování.

Single - Aplikace vytvoří jeden objekt sledovat hlavní adresář a používá tento objekt sledovat každý podadresář.

Doufám tedy, že si tím nezpůsobím nežádoucí chování aplikace v jiném ohledu, ale zdá se být vše OK.

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

chovani vasi aplikace je dost zvlastni :-/ tak hlavne ze jste to vyresil a snad to bude ok. dekuji za know-how

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