2010-03-29 16 views

Antwort

3

Ich muss Darin widersprechen. Ich rufe eine Funktion in Session_End auf, um das Ende der Sitzung aufzuzeichnen. Ich habe dies nicht explizit getestet, aber ich habe in meinen Logs die letzten Male nachgesehen, dass der App-Pool wiederverwendet wurde. Die Funktion wurde aufgerufen und das Ende der aktiven Sitzungen protokolliert.

Dies ist sowohl bei der Wiederverwendung des App-Pools nach einem Zeitplan als auch bei der Wiederverwendung der Fall, weil ich einige neue DLLs bereitgestellt habe.

+0

Einverstanden, nur getestet und es gefeuert :-) –

1

Wenn ich mich richtig erinnere (eine Weile seit ich die Dokumente gelesen habe), wird der normale App-Pool-Recycling-Timer (der ausgelöst wird, wenn die Ressourcen freigegeben werden) verzögert, weil der Server auf aktive Sitzungen setzt anhaltendes Bedürfnis. Sobald die Sitzungen ablaufen (und das Ereignis session_end auslösen), beginnt der App-Recycle-Zeitgeber neu und zählt rückwärts, bevor der Thread-Pool seine eigenen Ressourcen freigibt und die App beendet.

Das ist unter normalen Umständen, es sollte beachtet werden, dass das session_end -Ereignis ist nicht garantiert zu feuern (dort zu sehr spezifische Szenarien, wo es nicht wäre), denke ich jetzt ist dies meist mit abgestürzten Instanzen von IIS oder verwandt Der App-Pool wird für OOM oder Fehler wiederverwendet. Es ist zu verwenden, es sei denn, Sie verwenden nur einen der Sitzungstypen (Zustandsserver, glaube ich) würde es nicht zuverlässig auslösen. Das kann jetzt anders sein.

Wenn Sie sicherstellen müssen, dass Ressourcen freigegeben werden, bin ich nicht sicher, dass session_end der geeignete Ort dafür ist. Können Sie es auf den App Cache oder HTTP Cache erhöhen und Sitzungsschlüssel mit periodischen Bereinigungsereignissen verwenden? Das könnte zuverlässiger (mehr Code) aber zuverlässiger sein.

Es ist meine allgemeine Erfahrung, dass session_end ziemlich zuverlässig feuert, aber ich habe gesehen, dass es unter erheblicher Last (100s von Hits pro Sekunde) scheitert und ich weiß, wenn Sie anfangen über Serverfarmen zu reden, wird es auch sehr viel komplizierter.

+0

Ich spreche nur über 20-30 Benutzer max, aber die Kosten für das Verlassen der Verbindung ist sehr hoch und ich traue nicht den Remote-Server, um es zu schließen. –

1

Beachten Sie auch, dass Session_End nur aufgerufen wird, wenn Sie den Inproc-Sitzungsmodus verwenden. Für andere Modi (einschließlich SQL-Sitzungsstatusmodus) wird dieses Ereignis nie ausgelöst.

Verwandte Themen