Laden...

Statische Variablen

Erstellt von UschkinRedSunshine vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.098 Views
UschkinRedSunshine Themenstarter:in
68 Beiträge seit 2005
vor 18 Jahren
Statische Variablen

Hi,

Ich habe ein groesseres Projekt bekommen, welches zig hundert statische Variablen beinhaltet, und welches natuerlich mehrbenutzer-faehig sein soll.

Gibt es im IIS eine moeglichkeit zu sagen, das statische Variablen nur fuer eine session gelten sollen?

29 Beiträge seit 2005
vor 18 Jahren

Original von UschkinRedSunshine
Hi,

Ich habe ein groesseres Projekt bekommen, welches zig hundert statische Variablen beinhaltet, und welches natuerlich mehrbenutzer-faehig sein soll.

Gibt es im IIS eine moeglichkeit zu sagen, das statische Variablen nur fuer eine session gelten sollen?

Also meines Wissens nach werden statische Variablen vom IIS sowieso nur innerhalb einer User-Session gespeichert. Du meinst wahrscheinlich dass deine Variablen während der Application eine Gültigkeit haben und du ein Problem mit der MehrbenutzerFähigkeit hast, ich weiss jetzt nicht inwiefern du den Zustand persisten halten musst, aber falls du verhindern möchtest, dass gleichzeitiger Zugriff auf die statische Variable verhindert werden soll, so kannst du dieses Problem mit der "lock-Methode" beseitigen.

UschkinRedSunshine Themenstarter:in
68 Beiträge seit 2005
vor 18 Jahren

Das Problem an der Sache ist, das der Code schon so verworren ist.... Es funktioniert zwar als einzelner User, aber sobald mehrere User daran arbeiten, ueberschreiben sie sich gegenseitig die statischen variablen.

Und diese variablen ziehen sich durchweg durch zig Seiten, es existieren sogar statische DataSets ect.

Die Variablen brauchen eigentlich nicht persisent bleiben, das war urspruenglich anscheinend nur gedacht, um das Problem zu vermeiden, das die Variable zwischem aufruf der Seite und einem onClick Event den Wert nicht verlieren.

index.asp?id=100

static int id = Request["id"];
..
seitenaufbau, mit klick auf speichern
..
OnClick() { save(id0 }

Also gibt es dafuer nicht eine Einstellungssache, das die statischen Variablen nicht fuer die gesamte Applikation sondern nur fuer die Session gelten? Wuerde mir erheblichen aufwand ersparen.

29 Beiträge seit 2005
vor 18 Jahren

Also ob es so eine Einstellung gibt , könnte ich meinen Projektleiter fragen.

Aber grundlegend solltest du nicht einen Page-Parameter in eine statische Variable speichern. Du brauchst vielmehr ein UI-Framework wo deine Seiten 1:1 zu einer UIPage abgebildet werden, und diese UIPages speicherst du dir in das gewünschte Szenario, sprich SessionState oder in den ApplicationState.

Was ich aber noch nicht ganz in deinem Problem verstehe, was können mehrere User temporär verändern? Also wenn du das verhindern möchtest, dann mit "Lock"
du kannst jede Variable "locken" das .NET Framework überwacht es dann selbständig.

Aber ich befürchte, dass euere Architektur nicht stimmt. 🙁

UschkinRedSunshine Themenstarter:in
68 Beiträge seit 2005
vor 18 Jahren

Ja, die Architektur stimmt gewaltig nicht... werde das gewaltig umschreiben muessen, ich frage mich wirklich wie das bisher funktionieren konnte 😉

F
10.010 Beiträge seit 2004
vor 18 Jahren

Also es gibt weder im IIS noch im FW die Möglichkeit dies hinzubekommen.

Deine Statischen Variablen gelten für alle.
Wie KsenkteSau schon sagte stimmt eure Archtektur nicht, und der verantwortliche Entwickler gehört ......

Da kommt dann also ziemlich viel Arbeit auf dich zu.
Sorry.

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo UschkinRedSunshine!

Ich mache Dir mal einen Vorschlag, wie Du vielleicht etwas Arbeit ersparen kannst, aber das ist keine Musterlösung, und nur in Deinem Falle zwecks Arbeitserleichterung anzuwenden.

Pack alle statischen Variablen in eine eigene neue Klasse mit z.B. dem Namen "mySessionData". Dort machst Du sie dann public und NICHT statisch.

Auf Deiner ersten Startseite (die Seite die bei einem User als erstes aufgerufen wird) musst Du dafür sorgen, dass ein neues Objekt deiner neuen Klasse erstellt wird.

Dieses Objekt fügst Du dann mittels "Sessin.Add("MeineSessionDaten", mySessionDataInstance)" in der Initialphase ("OnInit") hinzu.

Jetzt kommt die Arbeit, die Dir nicht erspart bleibt:
An JEDER Stelle auf der auf solche statischen Variablen zugegriffen wird, musst Du ersetzen mit: "((mySessiondata) Session["MeineSessionDaten"]).meineVariable ..."

Das bekommst Du aber dann leicht zustande, wenn Du versuchst neu zu kompilieren, dann kannst Du mit Hilfe von VS die Stellen durch doppelklick erreichen. Kompilierfehler muss er für jeden Zugriff bringen, da Du die statischen Variablen ja zuvor herausgenommen hast.

Ich hoffe das war verständlich ausgedrückt, und nun gutes Gelingen 😉

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

29 Beiträge seit 2005
vor 18 Jahren
Sehr gute Lösungsidee

Eine sehr gute Lösungsidee, ist zwar ein Hek aber was solls 😁
Den Vorteil hierbei ist halt, dass du dann mit dem SessionObjekt so hantieren kannst wie du willst.

UschkinRedSunshine Themenstarter:in
68 Beiträge seit 2005
vor 18 Jahren

Danke, danke... gute Idee, aber was hindert mich dann daran, direkt die Variablen in die Session zu packen?

int static ID = 10;

Session["ID"] = 10;

Waere ja noch einfacher 😉 Nichtsdestotrotz ist das doch alles quack.

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo UschkinRedSunshine,

das ändert praktisch nix, doch es bewahrt Dir wenigstens Übersicht innerhalb des Session-Objektes, und dort herrscht nicht wie jetzt bei Dir im Code Kraut und Rüben.

Einfach nur so eine Art Schublade mit der Aufschrift "global static variables", damits aufgeräumter aussieht 😉

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”