Frage

Ich verstehe, dass alle InProc Session-Daten immer, wenn Prozess seines w3wp Besitzer rezykliert gegangen sind, da es nur in dem w3wp Speicher befindet.

Ich fragte mich, aber wenn es möglich ist, die Sitzungsdaten zwischenzuspeichern, wenn das Recycling in den Prozess irgendwo extern geschieht, und dann reinject (und Wiederaufbau) die Sitzung, wenn es wieder nach oben kommt. Auf diese Weise würde ich die Geschwindigkeit von InProc mit der Zuverlässigkeit der staatlichen server wie Externalisierung erhalten, wenn nötig. Ist das möglich?

War es hilfreich?

Lösung

Nein, das ist nicht möglich. Es gibt keine API zum „Aufwärmen“ in-Process-Sitzungszustand oder Cache. Eine solche Lösung unzuverlässig ohnehin wäre. Sie konnten nicht gaurantee, dass das letzte, was Ihre Anwendung tat wäre seiner aktuellen Sitzungsstatus exportieren, so konnte man sowieso nie aktuell sein auf den importierten Daten zählen.

Sie können mit dem Out-of-proc State-Server auf dem gleichen Host wie Ihre Web-Anwendung. Dann kann die Web-Anwendung frei recyceln, hält die Zustandsinformationen intakt. Das ist ziemlich viel schneller als SQL Server-Sitzungen zu verwalten, wie Sie mit dem Overhead von SQL oder Netzwerk-Transit auf eine andere Maschine zu tun haben die einzige Art und Weise nicht, es ist noch schlechter als in-Prozess ist Sitzungszustand, dass Daten zu Marschall über Prozessgrenzen, aber solange man überhaupt nicht eine enorme Menge an schnell ändernden Sitzungsdaten hat, soll dies nicht bemerkbar sein.

Es gibt auch andere Alternativen, wie zum Beispiel Microsoft Project Codename „Geschwindigkeit“ oder ScaleOut Software SessionServer (ua ich bin sicher) dass Angebot verteilte Caching-Mechanismen, den Sitzungsstatus oder Cache synchronisiert zwischen Servern in einer Server-Farm halten kann, ohne dass die Verwendung von SQL Server zurückzugreifen.

Im Gegensatz zu dem, was anderen Benutzern geschrieben, würde ich verwenden Viewstate NICHT Sitzungsdaten zu speichern, wenn überhaupt möglich. Zum einen ist es nicht wahr, Sitzungszustand, wenn ein Benutzer bewegt sich vorwärts oder rückwärts es verloren gehen kann. Zweitens, es ist ziemlich unsicher. Drittens bewirkt, dass es massive Seite aufblasen, wenn missbraucht.

Andere Tipps

Vielleicht können Sie genügend Informationen in einem Cookie (oder in Viewstate) speichern, so dass Sie eine Sitzung neu erstellen, auf der Grundlage dieser Daten im Fall des Arbeitsprozess zurückgeführt wurde.

Oder Sie könnten Ihren eigenen State-Server (beispielsweise ein Windows-Dienst) erstellen, in dem Sie einen Teil Ihrer Sitzung speichern und Zugriff auf diesen Service von dem Web-App via Remote oder ähnliches.

Sie sollten den SQL Server für Session State verwenden, wenn das Ihre Absicht ist. Was Sie wollen, sind Sitzungen, die von einer vollständigen Beendigung des Host processs erholen kann. Weder inproc oder State unterstützen, dass als wenn sie nach unten gehen sie alle Daten verloren gehen. Sie könnten Ihre eigenen Staat Methode schreiben, aber das wäre laboriuous. Hier Richtungen, wenn Sie das tun wollen:

http://www.exforsys.com/tutorials/asp.net-2.0/asp.net-2.0-customizing-the-session-state-mechanism.html

Was Sie wollen, können nicht Sitzungen überhaupt verwenden zu tun, sondern mehr auf Viewstate verlassen. Wenn Sie eine stark frequentierte Website, die eine gute Möglichkeit, die Arbeitsbelastung ab, um Kunden zu drücken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top