परिदृश्य:ManagedPipelineHandler दुर्घटनाओं
- उपयोगकर्ता IE9 उपयोग कर रहा है (IE8/10 प्रभावित नहीं)।
- उपयोगकर्ता का एक सक्रिय सत्र है।
- पृष्ठ
SessionState(SessionStateBehavior.Required)
विशेषता (ReadOnly
प्रभावित नहीं) के साथ एक नियंत्रक को एक AJAX POST (प्रभावित नहीं) अनुरोध शुरू करता है। कुछ इस अनुरोध को तत्काल संसाधित होने से रोकता है (जैसे प्रगति में एक और अनुरोध जिसमें सत्र लॉक है)। - जबकि कि AJAX पोस्ट प्रगति पर है, उपयोगकर्ता पेज (GET या POST - कोई फर्क नहीं पड़ता) से चला
परिणाम:
- AJAX पोस्ट समाप्त हो जाता है और एक HTTP रिटर्न 500 (जिसे ब्राउज़र ने तब से सुनना छोड़ दिया है, लेकिन आप इसे आईआईएस लॉग में देख सकते हैं)। आईआईएस विफल अनुरोध ट्रेसिंग त्रुटि दिखाता है "निर्दिष्ट नेटवर्क नाम अब उपलब्ध नहीं है। (0x80070040)।"
- उपयोगकर्ता के सत्र को अगले अनुरोध से पहले 80 से 120 सेकंड (आमतौर पर लगभग 100) के बीच लॉक किया जाता है जिसके लिए पढ़ने/लिखने के सत्र की आवश्यकता को निष्पादित करने की आवश्यकता होती है।
आगे विफल अनुरोध ट्रेसिंग आईआईएस द्वारा बनाई लॉग में खुदाई इंगित करता है कि AJAX पोस्ट इस के बाद सत्र स्थिति लॉक हो गया है (REQUEST_ACQUIRE_STATE
चरण के दौरान) की तरह दुर्घटनाओं, लेकिन जब से REQUEST_RELEASE_STATE
चरण नहीं होता है , सत्र लॉक जारी नहीं किया गया है। मुझे लगता है कि 80-120 सेकेंड के बाद सत्र को अनलॉक करने वाले नाटक में कुछ सुरक्षा तंत्र है, लेकिन यह बहुत लंबा लटका मेरे उपयोगकर्ताओं के लिए स्पष्ट रूप से अवांछित है।
मेरे पास एक साधारण वीएस2012/नेट 4.5/एमवीसी 4 प्रोजेक्ट है जो https://github.com/jorupp/Ie9SessionCrash पर उपलब्ध समस्या का प्रदर्शन करता है (एक पृष्ठ है जो स्लीप कॉल के साथ कार्यों की एक श्रृंखला बनाता है)। आईआईएस असफल अनुरोध ट्रेस इस समस्या को दिखा रहा है https://github.com/jorupp/Ie9SessionCrash/tree/master/Ie9SessionCrash/TraceOfHttp500 पर परियोजना में है।
समस्या के समाधान के लिए, हम यह सुनिश्चित करना है कि हम कभी नहीं किसी भी AJAX के पोस्ट कार्रवाई है कि सत्र की आवश्यकता के लिए कॉल करें, और योजना बना रहे हैं या तो:
- प्राप्त कॉल जहां संभव
- पोस्ट कॉल का उपयोग का उपयोग करना नियंत्रकों के लिए जिनके पास
SessionState(SessionStateBehavior.ReadOnly)
विशेषता है।
क्या इससे निपटने का कोई बेहतर तरीका है, या क्या मैं इसके संबंध में आईआईएस/नेट पैच खो रहा हूं? या यह परिदृश्य किसी अन्य कारण से मान्य नहीं है? मैं इसके लिए ढांचे/आईआईएस को दोष देने में संकोच कर रहा हूं, लेकिन मुझे लगता है कि मैंने अपने कोड को गलती से हटा दिया है।
आपकी जानकारी के लिए यह समस्या शायद IE7 और IE8 भी प्रभावित करता है। हमारे पास एक [धीमी पैच] प्रणाली है जहां हमने इन दो ब्राउज़रों के साथ इस तरह के व्यवहार की खोज की। ब्राउज़र ने पृष्ठ को स्विच करने के बाद पूरा होने वाले उत्कृष्ट अजाक्स अनुरोध के कारण समस्या उत्पन्न होती है। अनुरोध को स्पष्ट रूप से रद्द करके हम इसके आसपास काम कर सकते हैं। मैं इस मुद्दे को ठीक से पुष्टि नहीं कर सकता जब तक कि ("अत्यधिक सुरक्षित") ग्राहक प्रश्न में सिस्टम को पैच नहीं करता है, लेकिन यह इस के एमओ से मेल खाता है। – philw
@philw: विशिष्ट तरीका जिसे हम इसे तोड़ने के लिए प्राप्त कर रहे थे। नेट 4.5 (वर्कअराउंड या पैच लेवी उल्लेख से पहले) IE8 के साथ नहीं हुआ था, लेकिन उस स्थिति का कारण बनने का एक और तरीका हो सकता है (ब्राउज़र अनुरोध मध्य-स्ट्रीम को समाप्त करता है)। –
समझा। हालांकि हमने आईई 7 और आईई 8 दोनों पर इसकी पुष्टि की - एमएस पैच को स्थापित करने के लिए इसे ठीक से तय किया गया। हमारे मामले में यह मुद्दा ठीक था: "ब्राउजर ने इसके बाद सुनना बंद कर दिया है"। हम अभी भी देखते हैं कि (सर्वर लॉग में त्रुटि 64), लेकिन अब यह आईई 7 और आईई 8 को मारता नहीं है, अब हमने सर्वर को पैच किया है। – philw