2009-02-26 6 views
1

Wie kann ich eine benutzerspezifische Daten für eine ASP.Net-Anwendung beibehalten.ASP.Net persistente Daten in der Anwendung

Ich versuchte Session Variable - nicht gut, wenn der Worker-Prozess recycelt.

Ich brauche etwas, auf das GLOBAL von jeder Klasse meiner Anwendung zugegriffen werden kann.

Beratung sehr willkommen.

Ich habe versucht, asp.net Sitzung State Server zu verwenden, aber ich habe einige DLLs abstürzen, weil sie unsialisierbar sind.

Gibt es eine andere Möglichkeit, eine persistente Variable in der gesamten Anwendung zu haben?

+0

Wie lange müssen die Daten beibehalten werden? Alles, was mehr als ein paar Stunden und Sie sollten wahrscheinlich auf dem Server, oder in sql. Eine Antwort unten erwähnt Asp.net-Profile, die ein guter Ort sein können, um –

Antwort

1

Daten in einer Datenbank speichern (z. B. SQL Server).

0

Sie könnten das Profil Provider mit einer SQL-Datenbank als Sicherungsspeicher verwenden.

dieses nichts MSDN Article

+0

Care zu starten, um einige Artikel oder Beispiele zu zeigen? Vielen Dank. – Batuta

0

Theres Sehen Sie wirklich über den Prozess Recycling tun. Wenn Sie den Cache clever verwenden, um Informationen in einem globaleren Sinne zu behalten, haben Sie immer noch die gleiche Einschränkung des Arbeitsprozesses.

Ich versuche, meine App in einem n-Tier-Setup mit Business-Entity-Objekten zu entwerfen. Die Factory-Methoden für meine Objekte verwenden die Cache-Art wie ein faules Instantiierungsmuster. Wenn es im Cache ist, ziehen Sie es. Wenn nicht, lege es zum nächsten Mal in den Cache.

d.h

MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID) 

jetzt, wenn dies mein Objekt zurückgibt, kann es aus dem Cache sein oder auch nicht, wenn das Objekt unter hohen Auslastung ist, dann wird es wahrscheinlich im Cache gespeichert werden werden.

Dies kann in Ihrer gesamten App verwendet werden, und weil der Caching-Mechanismus zentral verwaltet wird, müssen Sie sich nicht wirklich darum kümmern.

+0

Würden Sie weitere Beispiele dazu posten? Ein Artikel vielleicht? Vielen Dank. – Batuta

1

Sie können den Sitzungsstatusserver so ändern, dass er nicht mehr in Betrieb ist, wodurch er wesentlich stabiler wird und ihn vom Arbeitsprozess trennt (Sie müssen den Asp.NET-Statusdienst auf dem Server starten können) wenn es nicht bereits läuft)

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/> 

auch wenn Sie es über Anwendungen in der gleichen Domäne teilen müssen, sollten Sie in der Lage sein, ihnen die gleichen machine key

+0

Ich denke eigentlich darüber nach, den StateServer-Modus zu verwenden, aber ich muss wissen, ob es etwas Spezifisches gibt, das ich in meinem IIS-Server konfigurieren muss. Vielen Dank. – Batuta

+0

Ich frage mich übrigens, warum es immer noch eine Auszeit für den StateServer-Modus gibt? Wenn der Statusservermodus abgelaufen ist, wird die in der Sitzung gespeicherte Variable ebenfalls gelöscht, richtig? – Batuta

+0

Ja, es gibt immer noch ein Timeout, aber es ist a) zuverlässiger, da es nicht zurückgesetzt wird, wenn die Anwendung zurückgesetzt wird, und b) für viel größere Werte gesetzt werden kann, weil es zuverlässig ist. Alles, was Sie tun müssen, ist den "Asp.NET State Service" auf Ihrem Server zu starten/aktivieren. –

1

geben Sie sollten Session verwenden. Sie können, wie dies in einer Klasse Sitzungsstatus global zugreifen ...

HttpContext.Current.Session 

zu vermeiden, um Sitzungen, die von dem Arbeitsprozess Recycling zu verlieren, verwenden StateServer Modus.

+0

Stellt der State Server-Modus sicher, dass der Wert, den ich in einer Sitzung für einen bestimmten Benutzer speichere, für eine längere Zeit bestehen bleibt? Verhält sich der Statusservermodus wie die normale Sitzungsvariable? Jedem Benutzer wird auch eine andere Sitzungs-ID zugewiesen? Vielen Dank. – Batuta

+0

Ja, zu allen Fragen. Der angegebene Link bestätigt das. Sie können den Sitzungszeitlimitwert (in Minuten) in Ihrer Datei web.config festlegen. –

0

Wenn Daten verloren gehen, wenn der Arbeitsprozess wiederverwendet wird, sollten Sie den InProc-Persistenzmodus für die Sitzung nicht mehr verwenden. Verwenden Sie StateServer oder SQL Server.Letztendlich könnten Sie Ihr eigenes Session Persistance Modul erstellen, wenn Sie beide nicht zufriedenstellen.