it-swarm.com.de

Anforderungen hängen am Sitzungsmodul an IIS 7.5

Von Zeit zu Zeit hängen einige Anforderungen auf meiner Website vom Status RequestAcquireState des Sitzungsmoduls ab. Wenn diese Spirale beginnt, beginnt das Zeitlimit für alle Anforderungen, und wir müssen IIS auf dem betroffenen Server neu starten.

Ich habe viel nachgeforscht und die einzige Schlussfolgerung ist, dass irgendwie ein Deadlock auftritt, während die Anwendung versucht, auf in Session gespeicherte Benutzerdaten zuzugreifen.

Die einzige Möglichkeit, dieses Problem zu beheben, besteht darin, die Verwendung von Sitzungen in meiner Anwendung zu reduzieren oder einzustellen. Dies ist definitiv Teil des Plans, aber es wird eine Weile dauern, bis wir das vollenden können.

Wir betreiben 6 Maschinen mit IIS 7.5, außerhalb von proc StateServer und Server-Affinität in unserem Lastausgleich.

Gibt es Hinweise, wie Sie dieses Problem umgehen oder beheben können, ohne die Sitzungen vollständig entfernen zu müssen?

IIS Hanging Processes

18
tucaz

Es gibt einen Sperrmechanismus für das Provider- und das Sitzungsmodul (IIS-Sitzungsmodul). Sie können ein benutzerdefiniertes Sitzungsmodul entwickeln, aber Sie benötigen noch einen Anbieter ohne Sperren. Sie können einen benutzerdefinierten Anbieter ohne Sperren entwickeln. Sie benötigen jedoch noch das Sitzungsmodul IIS, und die Implementierung auf dieser Ebene ist nicht so einfach.

Die Lösung ist UnlockedStateProvider [aka Unlocked]

Folgen Sie dem weißen Kaninchen: P (Überprüfen Sie das Demo-Projekt, es erklärt alles.)

6
efaruk

Die Antwort lautet Hotfix Rollup 2828841 für .NET Framework 4.5. Hier sind alle Erklärungen:

http://forums.asp.net/t/1888889.aspx/2/10?Question+regarding+a+possible+bug+within+NET+4+5

und hier der downloadlink

Es funktioniert für mich unter IIS 7.5 Windows Server 2008 rs x64, asp.net-Webformularanwendung mit viel Ajax-Anforderung.

5
RolandoCC

Ich habe gerade herausgefunden, dass, wenn Sie eine lange laufende Anforderung haben (oder in meinem Fall eine Endlosschleife), alle nachfolgenden Anforderungen gesperrt werden, da standardmäßig ASP.NET die Sitzung sperrt.  

Wenn Sie also Benutzer mit Anforderungen in RequestAcquireState haben, prüfen Sie, ob in ExecuteRequestHandler eine Anforderung vorhanden ist, die die Sitzung sperrt und somit den Start anderer Anforderungen verhindert.

Es gibt eine Diskussion hier , wie das Sperren von Sitzungen verhindert werden kann. (Erstellen Sie die meisten Seiten als schreibgeschützt und ändern Sie die Sitzung so selten wie möglich.)

4
jaraics

Ist es möglich, dass diese Benutzer eine weitere lange laufende Anfrage haben und die Anfragen, die Sie häufen, tatsächlich sekundäre Anfragen sind? Standardmäßig sperrt ASP.NET die Sitzung, bis eine Anforderung abgeschlossen ist. Wenn eine zweite Anforderung eingeht, bevor die erste abgeschlossen ist, muss sie warten. Wenn Sie MVC verwenden, können Sie dieses Verhalten ändern, indem Sie Ihrem Controller ein Attribut hinzufügen. 

[SessionState (SessionStateBehavior.ReadOnly)]]

Dadurch wird Session schreibgeschützt, wodurch das Sperrverhalten entfernt wird und nachfolgende Anforderungen verarbeitet werden können. 

0
ctsears