मुझे लगता है कि मुझे एएसपी.Net एप्लिकेशन में स्थैतिक वस्तुएं कैसे बनी रहती हैं, यह समझने में कुछ मदद चाहिए। एक वर्ग पुस्तकालय मेंउपयोगकर्ता सत्रों के बीच मेरे एएसपी.Net स्थिर फ़ंक्शन का "संदर्भ" क्रॉसओवर क्यों है?
someFile.cs: एक वर्ग पुस्तकालय में
public delegate void CustomFunction();
public static class A {
public static CustomFunction Func = null;
}
someOtherFile.cs:
public class Q {
public Q() {
if (A.Func != null) {
A.Func();
}
}
}
कुछ ASP.Net पेज:
Page_Init {
A.Func = MyFunc;
}
public void MyFunc() {
System.IO.File.AppendAllText(
"mydebug.txt", DateTime.Now.ToString("hh/mm/ss.fff", Session.SessionID));
}
Page_Load {
Q myQ = new Q();
System.Threading.Thread.Sleep(20000);
mQ = new Q();
}
मैं इस परिदृश्य है
विचार यह है कि मेरे पास एक व्यावसायिक वस्तु है जो यूआई स्तर पर कॉलबैक फ़ंक्शन के आधार पर कुछ ऑपरेशन करता है। मैंने कॉलबैक फ़ंक्शन को पेज_इनिट पर एक स्थिर चर में सेट किया है (वास्तविक कोड संस्करण में, मास्टर पेज में, यदि इससे कोई फर्क पड़ता है)। मैंने सोचा कि पृष्ठ के हर निष्पादन, इससे कोई फर्क नहीं पड़ता कि यह किस उपयोगकर्ता सत्र से आया था, उस फ़ंक्शन के तर्क से गुज़र जाएगा लेकिन डेटा के अपने सेट पर काम करेगा। ऐसा लगता है कि इसके बजाय क्या हो रहा है एक सहमति मुद्दा है।
यदि मैं एक उपयोगकर्ता सत्र चलाता हूं, तो जब वह कॉलबैक फ़ंक्शन पर कॉल के बीच सो रहा है, तो दूसरा सत्र सत्र शुरू करें, जब पहला सत्र सोने से वापस आता है तो यह दूसरे उपयोगकर्ता सत्र से सत्र आईडी उठाता है। यह कैसे संभव हो सकता है?
mydebug.txt के आउटपुट:
01/01/01.000 abababababab (session #1, first call)
01/01/05.000 cdcdcdcdcdcd (session #2, first call - started 5 seconds after session #1)
01/01/21.000 cdcdcdcdcdcd (session #1 returns after the wait but has assumed the function context from session #2!!!!!)
01/01/25.000 cdcdcdcdcdcd (session #2 returns with its own context)
क्यों समारोह के संदर्भ (जिसका अर्थ है, अपने स्थानीय डेटा, आदि) एक से दूसरे उपयोगकर्ता के सत्र से ओवरराइट किया जा रहा है?
धन्यवाद, हर कोई, मदद के लिए। StackOverflow नियम। :) –