2013-03-15 13 views
6

परिदृश्य: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) विशेषता है।

क्या इससे निपटने का कोई बेहतर तरीका है, या क्या मैं इसके संबंध में आईआईएस/नेट पैच खो रहा हूं? या यह परिदृश्य किसी अन्य कारण से मान्य नहीं है? मैं इसके लिए ढांचे/आईआईएस को दोष देने में संकोच कर रहा हूं, लेकिन मुझे लगता है कि मैंने अपने कोड को गलती से हटा दिया है।

+0

आपकी जानकारी के लिए यह समस्या शायद IE7 और IE8 भी प्रभावित करता है। हमारे पास एक [धीमी पैच] प्रणाली है जहां हमने इन दो ब्राउज़रों के साथ इस तरह के व्यवहार की खोज की। ब्राउज़र ने पृष्ठ को स्विच करने के बाद पूरा होने वाले उत्कृष्ट अजाक्स अनुरोध के कारण समस्या उत्पन्न होती है। अनुरोध को स्पष्ट रूप से रद्द करके हम इसके आसपास काम कर सकते हैं। मैं इस मुद्दे को ठीक से पुष्टि नहीं कर सकता जब तक कि ("अत्यधिक सुरक्षित") ग्राहक प्रश्न में सिस्टम को पैच नहीं करता है, लेकिन यह इस के एमओ से मेल खाता है। – philw

+0

@philw: विशिष्ट तरीका जिसे हम इसे तोड़ने के लिए प्राप्त कर रहे थे। नेट 4.5 (वर्कअराउंड या पैच लेवी उल्लेख से पहले) IE8 के साथ नहीं हुआ था, लेकिन उस स्थिति का कारण बनने का एक और तरीका हो सकता है (ब्राउज़र अनुरोध मध्य-स्ट्रीम को समाप्त करता है)। –

+0

समझा। हालांकि हमने आईई 7 और आईई 8 दोनों पर इसकी पुष्टि की - एमएस पैच को स्थापित करने के लिए इसे ठीक से तय किया गया। हमारे मामले में यह मुद्दा ठीक था: "ब्राउजर ने इसके बाद सुनना बंद कर दिया है"। हम अभी भी देखते हैं कि (सर्वर लॉग में त्रुटि 64), लेकिन अब यह आईई 7 और आईई 8 को मारता नहीं है, अब हमने सर्वर को पैच किया है। – philw

उत्तर

5

यह एएसपी.NET 4.5 में एक प्रतिगमन प्रतीत होता है। हमारी टीम एक पैच पर काम कर रहा है, लेकिन एक अस्थायी समाधान के रूप (अधिक जानकारी here) Web.config में इस लाइन को रखने का प्रयास करें:

<system.webServer> 
    <serverRuntime uploadReadAheadSize="0" /> 
</system.webServer> 

कृपया हमें बताएं कि यह आपके लिए काम करता है!

+0

मुझे अपने IISExpress इंस्टेंस के लिए applicationhost.config फ़ाइल को अनलॉक करने के लिए अद्यतन करना था, लेकिन यह चाल थी। सहायता के लिए धन्यवाद। क्लासिक मोड का उपयोग करना भी काम करता था, लेकिन मुझे उम्मीद थी कि मुझे अब तक नहीं जाना पड़ेगा। –

+0

बीटीडब्ल्यू, लॉग के लिए बहुत बहुत धन्यवाद! उन्होंने वास्तव में हमें इस मुद्दे को जल्दी से कम करने में मदद की। :) – Levi

+0

आपका स्वागत है - आपने निश्चित रूप से इसे मेरे लिए पोस्ट करने के लिए तुरंत हल किया है और इसके लिए कनेक्ट पर कुछ खोलने के लिए भी परेशान नहीं है। यह लगभग आपके जैसे लोगों को ऊब गया है और बाहर निकलने के लिए * सक्रिय रूप से देख रहे हैं :) –

1

लेवी का उत्तर आईआईएस 7.5 या उच्चतम में बहुत अच्छा काम करता है।लेकिन अगर आप सर्वर 2008 आर 1 चल रहे हैं, निम्न आदेश भी सेटिंग सेट होगा:

c:\windows\system32\inetsrv\appcmd.exe set config "sitename" -section:system.webServer/serverRuntime /uploadReadAheadSize:"0" /commit:apphost 

लेकिन, एक बेहतर ठीक Microsoft से हॉटफिक्स लागू करने के लिए है जो (संलग्न KB लेख में # 6) उपचार मुद्दा

http://support.microsoft.com/kb/2828841/EN-US
http://support.microsoft.com/kb/2828842/EN-US

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