मुझे अभी पता चला है कि ASP.Net वेब एप्लिकेशन में प्रत्येक अनुरोध एक अनुरोध की शुरुआत में एक सत्र लॉक हो जाता है, और फिर अनुरोध के अंत में इसे जारी करता है!
इस मामले में निहितार्थ आप पर खो गए हैं, क्योंकि यह मेरे लिए पहले था, इसका मूल रूप से निम्नलिखित अर्थ है:
कभी भी ASP.Net वेबपेज को लोड होने में लंबा समय लग रहा है (हो सकता है कि धीमे डेटाबेस कॉल या जो भी हो) के कारण, और उपयोगकर्ता तय करता है कि वे एक अलग पेज पर नेविगेट करना चाहते हैं क्योंकि वे प्रतीक्षा करते-करते थक गए हैं, तो वे नहीं कर सकते! ASP.Net सत्र लॉक नए पेज के अनुरोध को प्रतीक्षा करने के लिए मजबूर करता है जब तक कि मूल अनुरोध ने इसकी धीमी गति से लोड को समाप्त नहीं किया है। Arrrgh।
जब भी कोई UpdatePanel धीरे-धीरे लोड हो रहा है, और उपयोगकर्ता UpdatePanel को अपडेट करने से पहले एक अलग पृष्ठ पर नेविगेट करने का निर्णय लेता है ... वे नहीं कर सकते! ASP.net सत्र लॉक नए पेज के अनुरोध को तब तक इंतजार करने के लिए मजबूर करता है जब तक कि मूल अनुरोध ने इसकी धीमी गति से लोड को समाप्त नहीं कर दिया हो। डबल Arrrgh!
तो, विकल्प क्या हैं? अब तक मैं साथ आया हूँ:
- एक कस्टम SessionStateDataStore लागू करें, जो ASP.Net का समर्थन करता है। मुझे कॉपी करने के लिए बहुत सारे नहीं मिले हैं, और यह उच्च जोखिम और गड़बड़ करने में आसान लगता है।
- प्रगति के सभी अनुरोधों पर नज़र रखें, और यदि एक अनुरोध एक ही उपयोगकर्ता से आता है, तो मूल अनुरोध को रद्द करें। अति की तरह लगता है, लेकिन यह काम करेगा (मुझे लगता है)।
- सत्र का उपयोग न करें! जब मुझे उपयोगकर्ता के लिए किसी प्रकार की स्थिति की आवश्यकता होती है, तो मैं इसके बजाय कैश का उपयोग कर सकता हूं, और प्रमाणित उपयोगकर्ता नाम या कुछ ऐसी चीजों पर कुंजी आइटम। फिर से चरम की तरह लगता है।
मैं वास्तव में विश्वास नहीं कर सकता कि ASP.Net Microsoft टीम ने संस्करण 4.0 में फ्रेमवर्क में इतना बड़ा प्रदर्शन अड़चन छोड़ दिया होगा! क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है? सत्र के लिए थ्रेडसेफ़ संग्रह का उपयोग करना कितना कठिन होगा?