2013-03-07 11 views
9

हम उत्पाद को .NET 4.5 में अपग्रेड करने के बाद हमारी साइट पर कुछ अजीब व्यवहार कर रहे हैं। मैं जितना संभव हो उतना विशिष्ट होने की कोशिश करूंगा लेकिन समस्या अस्पष्ट है, इसलिए कृपया मेरे साथ भालू। इसके अलावा, इस परिदृश्य के लिए, इस धारणा के तहत काम करें कि कोई भी सर्वोत्तम प्रथाओं का पालन नहीं किया गया है।एएसपी.NET अनुरोध और .NET 4.5 - अजीब व्यवहार

उपयोगकर्ता ऐसे पृष्ठ पर आ रहा है जो कई jquery AJAX कॉल, असीमित रूप से, एक webservice पर बनाता है। इस पृष्ठ पर खराब डिज़ाइन/कोडिंग के कारण, यह हमेशा लोड होने में लग सकता है, लेकिन यह एक उप मेनू प्रदान करता है जिसे उपयोगकर्ता को एक्सेस की आवश्यकता होती है। एक बार पृष्ठ लोड होने के बाद, वे किसी अन्य पृष्ठ पर जाने के लिए मेनू विकल्पों में से एक पर क्लिक करते हैं। अभी तक कुछ खास नहीं है।

जब हम .NET 4.0 केवल स्थापित के साथ एक बॉक्स पर परफ़ॉर्मेंस उपयोग करते हैं, हम देख सकते हैं ASP.NET अनुरोध को अधिक या कम, जैसा कि आप उम्मीद करेंगे:

Perfmon on 4.0 box

जब हम उस पर स्थापित करें .NET 4.5 के साथ एक बॉक्स स्थापित है, हम इसे प्राप्त करते हैं: enter image description here

ऊपर वर्णित वर्कफ़्लो को निष्पादित करने के बाद, अनुरोध लटका हुआ है। कतारबद्ध नहीं है; वे बस वहां बैठते हैं।

आगे के शोध के बाद, हम देख रहे हैं कि दो अलग-अलग पृष्ठों के बीच क्लिक करना सिर्फ एक साधारण href नहीं है, लेकिन वास्तव में Response.Redirect (url) का उपयोग कर रहा है;

इसके अलावा, यह केवल आईई का उपयोग करते समय हो रहा है। फ़ायरफ़ॉक्स और क्रोम का उपयोग करते समय यह कोई समस्या नहीं है।

यहाँ क्या हम अब तक की कोशिश की है है:

  1. हम एम $ से संपर्क किया और उन्हें बाहर भेजा DebugDiag उदासीनता है। अब भी इंतज़ार।
  2. मैं आईआईएस गया हूं, साइट को असफल अनुरोधों का पता लगाने के लिए सेट किया है, और मुझे सब कुछ देने के लिए एक असफल अनुरोध फ़िल्टर स्थापित किया है। एक बार साइट लॉक हो जाने पर, मैं लॉग साफ़ करता हूं, और उसके बाद साइट लॉक के बाद क्या आता है इसकी जांच करें। जब भी यह AspNetSessionDataBegin और AspNetSessionDataEnd घटनाओं के बीच लटका रहा है।
  3. हमारे पास एक HttpHandler है जो सत्र को पढ़ता/लिखता है, और इसे अक्षम करने से अधिकांश भाग के लिए समस्या ठीक हो जाती है, लेकिन इस बारे में कोई स्पष्टीकरण नहीं है।
  4. jquery के ऑनलोड लोड हैंडलर, जो सभी शेष xmlhttp अनुरोधों को साफ़ और निरस्त करना चाहिए, लगातार निष्पादित नहीं होता है।
  5. इस patch स्थापित किया गया, अभी भी मदद नहीं की।
  6. हम वर्तमान में इस नेविगेशन तर्क में Response.Redirect (url) विधियों को बदल रहे हैं Response.Redirect (url, false); (ऊपर देखो)।

    public class KeepSessionAliveHttpHandler : IHttpHandler, IRequiresSessionState 
    { 
        public bool IsReusable 
        { 
         get { return true; } 
        } 
    
        public void ProcessRequest(HttpContext context) 
        { 
    
         if (context.Session.IsNewSession) 
         { 
          string redirectUrl = context.Request.Url.AbsoluteUri.Replace(context.Request.Url.AbsolutePath, VirtualPathUtility.ToAbsolute(Constant.Page_Logout)); 
          context.Response.Clear(); 
          context.Response.ContentType = "application/json; charset=utf-8"; 
          context.Response.Flush(); 
          context.Response.Write("{\"IsSessionAlive\": \"false\", \"RedirectUrl\": \"" + redirectUrl + "\"}"); 
         } 
         else 
         { 
          context.Session["KeepSessionAlive"] = TimeZoneHelper.GetCurrentUtcDateTime(); 
    
          context.Response.Clear(); 
          context.Response.ContentType = "application/json; charset=utf-8"; 
          context.Response.Flush(); 
          context.Response.Write("{\"IsSessionAlive\": \"true\"}"); 
         } 
        } 
    } 
    

    जहाँ हम अगले दिखना चाहिए पर कोई सुझाव:

के रूप में भी अनुरोध किया है, यहाँ HttpHandler कोड है?

+0

क्या HttpHandler कैसा दिखता है? – Nate

+1

क्या आपने अपनी प्रतिक्रिया बंद करने की कोशिश की है? { Context.Response.End() का प्रयास करें; } पकड़ (ThreadAbortException अं) {} पकड़ (अपवाद अं) {} – Sameh

+0

@Sameh मैं कोशिश करूँगा, लेकिन मैं क्या बता सकते हैं कि हम इस का उपयोग हमारे jQuery ajax कॉल करने के लिए इस डेटा पहले जोड़ें करने के लिए से। प्रतिक्रिया समाप्त होने पर मुझे लगता है कि यह खत्म हो जाएगा। – Schandlich

उत्तर

4

निम्न पैच अब माइक्रोसॉफ्ट द्वारा जारी किया गया है जो वेब.कॉन्फिग या आईआईएस कॉन्फ़िगरेशन परिवर्तनों के बिना समस्या को ठीक करने के लिए प्रतीत होता है। http://support.microsoft.com/kb/2828841/en-us http://support.microsoft.com/kb/2828842/en-us

पूर्व उत्तर

आगे की जांच पड़ताल और अंतर्दृष्टि के बाद/नेट अनुकूलता टीम द्वारा प्रदान समाधान, मैं इस प्रश्न को संपादित कर रहा हूँ।

ManagedPipelineHandler for an AJAX POST crashes if an IE9 user navigates away from a page while that call was in progress पर पाया गया समाधान हमारे लिए अधिक विश्वसनीय रूप से काम कर रहा प्रतीत होता है। यह वह व्यवहार है जिसे हम आईई 8-10 में अनुभव कर रहे थे, न कि सिर्फ 9।

मैं यहां पुराना उत्तर रखने जा रहा हूं, क्योंकि उम्मीद है कि पहले जवाब प्रासंगिक नहीं है, तो उम्मीद है कि लोगों को दूसरी दिशा में इंगित किया जा सकता है।

पूर्व पूर्व उत्तर

स्रोत सत्र लॉकिंग समाप्त हो गया। AspNetSessionDataBegin और AspNetSessionDataEnd घटनाओं को मृत दे दिया जाना चाहिए था। किसी भी व्यक्ति के लिए जो इस समस्या पर ठोकर खाता है, यह देखने के लिए कि आप सत्र में कब और कैसे लिख रहे हैं। इन लिंकों ने भी मदद की।

Replacing ASP.Net's session entirely

I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it

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