Ich habe Probleme damit zu verstehen, wie IIS statische Variablen in seinen Threads behandelt. Mein Verständnis war immer, dass, wenn IIS 4 Worker-Prozesse hat, es 4 Anfragen gleichzeitig behandeln kann und dass es das gleiche wäre, als hätte man 4 separate Threads, die die Website ausführen. Alle statischen Variablen würden in jedem einzelnen Thread bestehen bleiben. Der Grund, warum ich ein wenig verwirrt bin, ist, dass ich einen Bereich habe, den ich gemacht habe, der Verbindungen und Caching-Transaktionen verwaltet. Wenn ich die App teste, merke ich keine Probleme, aber nachdem ich sie kompiliert und gleichzeitig von zwei verschiedenen Orten aus getroffen habe, scheint mir eine Art von Konflikt zu entstehen. Wenn diese Arbeitsprozesse getrennt sind, warum sollte das dann sein? Können mehrere Anfragen gleichzeitig in einem einzelnen Worker-Thread bearbeitet werden? Dies ist enorm wichtig, da eindeutige IDs in diesen statischen Membern enthalten sind, um die Eskalation der Objekte zu verwalten, die diese Funktionen verwalten, und es scheint, dass sie versuchen, auf dasselbe Objekt zuzugreifen.Wie verhindere ich, dass auf statische Elementvariablen in IIS jeweils mehr als eine Anforderung zugegriffen wird?
Ich führe dies auf Vista IIS-Server auf einem x64-Rechner.
EDIT
Bei Werten, die auf einer einzigen Anforderung durch das Gewinde müssen bestehen bleiben, habe ich diese Werte in Web.HttpContext.Current.Items
, die den Trick zu tun scheint.
<ThreadStatic()>
kann verwendet werden, ist aber möglicherweise während des gesamten Anforderungsprozesses nicht verfügbar. In einem Modul, das ich habe, wird nur auf eine Variable verwendet, um anzuzeigen, wenn dieser Thread die Einstellungen für den Caching-Server bereits geladen hat. Wenn dies der Fall ist, ist das Profil (nicht asp.net) bereit, Daten vom Caching-Server abzurufen.
Wissen Sie dann, wie der Transaktionsbereich dieses Problem in asp.net behandelt? – Middletone
Transaktionsbereich ist nicht verwandt. –
die Objekte werden erstellt, um die Art des Verhaltens des Transaktionsbereichs zu simulieren, nur behandelt es andere Objekte anstelle der DB-Transaktionsisolation. – Middletone