The PIT
Röster från ITM-koncernen.

Applikationspooler och Sessionstates

February 4, 2010 14:23 by Stefan Karlsson

 

Stötte på ett problem med sessioner som försvann. Vilket var väldigt irriterande då vi inte kunde hitta anledningen, inga error, inga loggevent, inga spår alls om varför det skedde. Började titta i eventloggen på servern och se vad som loggats vid de tidpunkter som detta inträffade. Det enda jag såg som kunde kopplas till detta var informationsevent om att applikationspoolen gjort en recycle.

image

Applikationspooler

image


Som default så kopplas din website till DefaultAppPool, men du kan också skapa en egen applikationspool för din site. En applikationspool är egentligen en (arbets)process. Och som default så är det inställt att var 29:e timme så recyklas (återvinns/återanvänds) processen. Den återvinns också om något fel uppstår, men då loggas det som varning i eventloggen. En vanlig 29:timmes-recycling loggas som ett vanligt informationsevent för det anses vara ett naturligt flödeslopp.

image


Problemet

Problemet som uppstår är att vid återvinning så kan alla sessions-states som är aktiva i webbapplikationen (kan) dödas. Vilket är förödande om man har en webbokningssite och någon är mitt uppe i en bokning, kanske precis gått igenom betalningen och bokningen sedan ska sparas, skrivas ut, mailas. Om applikationspoolen återvinns just då så kan viktiga sessionsdata vara borta och du kanske inte hittar tillbaka till den aktuella bokningen osv.

Lösning

Enda sättet att komma förbi det här problemet är något av nedanstående:

  • Inte använda sessions-state (använd cookies, querystring osv) Men det kan vara farligt i en webbokning då användarna inte ska få trixa med priser, artikelnummer osv och man måste i så fall ta det med i beräkning när man bygger upp flödet (verifiering & validering blir mycket mer viktigt)

  • Stänga av Worker process recycling (vilket jag inte vet vad det kan få för konsekvenser, tar man detta beslut bör man googla vidare på det)

  • Ställa in så att sessions-states lagras i databas. Detta är väl den vettigaste vägen och öppnar även upp för andra fördelar (lastbalansering, uppdaterbar site utan att sessioner försvinner, kan starta om servern och behålla states osv)

  • På något annat sätt hantera lagring av sessionsstate när en process återvinns.

    Källa:
    “By default, Worker Processes recycle after a preconfigured amount of time. If your ASP applications are not designed to store session state while a worker process is recycled, then session state in that ASP application can be lost. To remedy this problem, you can either store session state in a database or disable worker process recycling.”

Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed