2010-09-13 10 views
10

एएसपी.नेट एक ही सत्र के लिए समवर्ती अनुरोधों की अनुमति नहीं देता है; जिसका अर्थ है कि उपयोगकर्ता एक समय में केवल 1 अनुरोध कर सकता है।क्या एएसपी.NET सत्रों का उपयोग करते समय अनुरोध समेकन को मजबूर करना संभव है?

उदाहरण के लिए, कहते हैं कि हम Test1.aspx है:

public partial class Test1 : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Session["test"] = 1; 
     System.Threading.Thread.Sleep(int.Parse(Request.QueryString["timeout"])); 
    } 
    } 

... और Test2.aspx:

public partial class Test2 : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Session["test"] = 1; 
     Label1.Text = DateTime.Now.ToString("dd/MM/yy HH:mm:ss"); 
    } 
    } 

जब हम पर जाएँ Test1.aspx?timeout=10000, और फिर तुरंत यात्रा Page2.aspx के बाद, 2 अनुरोध करना होगा पहला अनुरोध पूरा होने तक 10 सेकंड तक प्रतीक्षा करें।

मैंने अभी यह अभी सीखा है, और मैं 5 साल के लिए एएसपी.नेट का उपयोग कर रहा हूं! जब तक मैं इसे किसी एमएसडीएन पृष्ठ (ASP.NET Session State Overview) के नीचे पढ़ता हूं तब तक मैं वास्तव में विश्वास नहीं करता था।

तो, क्या समेकन को मजबूर करने का कोई तरीका है? यही है, पृष्ठों को तेज़ी से बनाने, या पृष्ठभूमि थ्रेड पर लंबे समय तक चलने वाले कोड को स्थानांतरित करने के अलावा। मुझे पता है कि आप सत्र को केवल पढ़ सकते हैं, लेकिन मुझे पूरा यकीन नहीं है कि यह एक व्यावहारिक विकल्प है।

+0

वाह, मैं इसे 1.0 के बाद से उपयोग कर रहे हैं इस्तेमाल किया जा सकता है और यह भी नहीं पता था कि :(यह हो गया है मैंने जिन ऐप्स के साथ काम किया है, उनमें से कोई भी समस्या नहीं है, लेकिन मुझे आश्चर्य है कि यह ऐप में क्या करेगा जो किसी सत्र के लिए सत्र का उपयोग करता है और फिर ब्राउज़र पर एक बड़ी डाउनलोड फ़ाइल भेजने के लिए आगे बढ़ता है। असल में, बस एक था मेरे पीछे एक फ़ाइल हैंडलर में सत्र को अक्षम करने के लिए फ्लैश बैक, क्योंकि हम भविष्य में सत्र बंद प्रक्रिया को स्थानांतरित करने की योजना बना रहे थे, मुझे आश्चर्य है कि डाउनलोड को ऐप अवरुद्ध क्यों किया गया है, यह जानने के लिए सिरदर्द कितना बड़ा होगा ... – eglasius

+0

इस के बाद से ऊपर हटाना सवाल भी मेरे दिमाग के पीछे भी रहा है।बहुत करीबी से संबंधित: क्या यह समवर्ती प्रतिबंध एएसएमएक्स webservice कॉल पर भी लागू होता है जहां [WebMethod (EnableSession = true)]? – mikemanne

+0

मेरे परीक्षणों में अब तक यह nbolton वर्णन से भी बदतर है; भले ही टेस्ट 2 सत्र तक पहुंच/परिवर्तन न करे, फिर भी टेस्ट 1 समाप्त होने तक यह तब तक अवरुद्ध होगा। इसके आस-पास काम करने का एकमात्र तरीका यह है कि Test2 पर पृष्ठ निर्देश के रूप में EnableSessionState = "गलत" को स्पष्ट रूप से सेट करना है। – Chris

उत्तर

3

हालांकि मैं अभी से यह सीखा प्रश्न, मैं यह सुनिश्चित करने के बारे में अधिक जानकारी के लिए Implementing a Session-State Store Provider में लॉकिंग सत्र-स्टोर डेटा अनुभाग को जांचना सुनिश्चित कर दूंगा।

उपरोक्त के आधार पर, यह वास्तव में उस तंत्र के आसपास काम करने का प्रयास करने के लिए एक अच्छा विचार प्रतीत नहीं होता है।

जैसा आपने बताया है, अनुरोधों को छोटा रखें और अनुरोध थ्रेड से लंबे समय तक चलने वाले कोड को स्थानांतरित करें। इसके अतिरिक्त:

  • यदि आपको इसकी आवश्यकता नहीं है तो सत्र को अक्षम करें। सबसे महत्वपूर्ण बात यह है कि यदि आप उस अनुरोध में कुछ भी बड़ा भेज रहे हैं।
  • सत्र के अनावश्यक उपयोग से बचें।

वे सभी कुछ हैं जो आपको पहले से ही कर रहे हैं।

+0

यदि आप इस पर काम करने के लिए एक कस्टम सत्र-राज्य प्रदाता को लागू करने का प्रयास करना चाहते हैं, तो मुझे यह एमएसडीएन लेख [सत्र राज्य प्रदाता] (http://msdn.microsoft.com/en-us मिला) /library/aa478952.aspx) उपयोगी, विशेष रूप से जब यह GetItem और GetItemExclusive कहलाता है तो इसकी स्पष्टीकरण। – Chris

1

जहां तक ​​मुझे पता है कि यह आपके स्वयं के सत्र-राज्य प्रदाता के बिना संभव नहीं है।

(आप अपने सत्र की दुकान के रूप एसक्यूएल सर्वर का उपयोग कर रहे तो यह समवर्ती पढ़ता अनुमति देने के लिए संग्रहित प्रक्रियाओं को हैक करने के लिए संभव हो सकता है, लेकिन निश्चित रूप से अनुशंसित नहीं है।)

1

एएसपी.नेट पेजों के लिए आप @ पेज निर्देश में ReadSessionState मान को बदलने की कोशिश कर सकते हैं केवल पढ़ने के लिए।

.NET फ्रेमवर्क 4.5 जोड़ा एक नया HttpContext.SetSessionStateBehavior विधि है कि पूरे आवेदन करने के लिए सत्र व्यवहार स्थापित करने के लिए

संबंधित मुद्दे

 संबंधित मुद्दे