Ich habe einen WCF-Dienst mit Sitzungen erforderlich
%Vor%und einige statische Felder. Ich dachte, dass die statischen Felder für jede Sitzung gleich bleiben, aber neue Instanzen für verschiedene Sitzungen haben. Was ich jedoch sehe, wenn ich zwei verschiedene Clients verwende, ist, dass wenn ein Client den Wert eines Feldes ändert, diese Änderung auch den anderen Client betrifft. Ist das normales Verhalten für verschiedene Sitzungen? Oder meinst du vielleicht, dass mein Dienst nicht einmal verschiedene Sitzungen erstellt?
Ich verwende netTCPbinding.
Statische Variablen werden über den gesamten Prozess verteilt, daher das Verhalten, das Sie sehen. Wenn Sie jedoch den Instanzkontext-Modus des Dienstes aktivieren pro Sitzung , dann wird diese Serviceinstanz zusammen mit ihren (nicht statischen) Variablen pro Sitzung erstellt. Also hier somevar
ist einzigartig für die Sitzung:
Das statische Feld ist global für die Lebensdauer der Anwendung. So sehen verschiedene Kunden die gleiche statische Variable. Wenn Sie für jeden Client eine 'statische Variable' haben möchten, müssten Sie diese irgendwo im Sitzungszustand dieses Benutzers speichern (ich kenne WCF nicht gut, daher weiß ich nicht, was genau das im Kontext von WCF bedeutet)
Der Bereich einer statischen Variablen ist die Anwendungsdomäne. Dies liegt daran, dass Ihr tatsächlicher Typ (Klasse, aus der die Instanzen erstellt werden) einmal in einer Anwendungsdomäne geladen wird. Dies gilt auch für alle zugehörigen statischen Variablen und Methoden. Selbst wenn Sie mehrere Instanzen oder eine einzelne Instanz eines Service haben, teilen sie sich die statische Variable.