2009-02-25 4 views
14

स्थिति: कस्टम एप्लिकेशन पूल का उपयोग करके क्लासिक एएसपी एप्लिकेशन। डिफ़ॉल्ट सेटिंग्स।आईआईएस 7 - केवल एक समय में एक पृष्ठ परोसता है। यह मुझे क्रैजी बना रहा है!

पर आईआईएस 7 मशीन, आईआईएस एक समय में केवल एक पृष्ठ की सेवा करने का फैसला करता है। तो यदि साइट से किसी भी पृष्ठ को एकाधिक लोड करते हैं, तो प्रत्येक को उत्तराधिकार में लोड करना होगा।

उदा। यदि मैं एक ब्राउज़र से http://foo.com/default.asp लोड करता हूं, और दूसरी मशीन से मैं http://foo.com/differenturl.asp लोड करता हूं, तो पहले लोड होने से पहले इसे समाप्त करना होगा। यह लगभग w3p प्रक्रिया एकल थ्रेडेड की तरह है।

नोट, आईआईएस के लिए उन्नत सेटिंग्स में मैक्सप्रोसेस नामक एक सेटिंग है जो कहती है "वेब गार्डन बनाने के लिए इसे 1 से अधिक सेट करें" (जो कुछ भी है)। यह समस्या को हल नहीं करता है क्योंकि इससे कई प्रक्रियाएं अपने स्वयं के सत्र स्थिति आदि के साथ उत्पन्न होती हैं, और जब आप http://foo.com/default.asp लोड करते हैं तो आपको एक ही प्रक्रिया में असाइन करने की गारंटी देने का कोई तरीका नहीं है।

समस्या स्वयं ही प्रकट हुई क्योंकि हमारे पास एक निदान पृष्ठ है जो एएसपी में लिखा गया है जो बनाता है और ActiveX नियंत्रण जो वेबसाइट पर यूआरएल लोड करता है और परिणाम देता है।

तो, डायग्नोस्टिक्स.एएस लोड और सर्वर पक्ष पर कोड में यह एक छोटा सा वेब नियंत्रण बनाता है जो उसी सर्वर पर लोड (एक्सएमएलएचटीटीपी नियंत्रण) default.asp लोड करता है।

यह पृष्ठ कभी भी लोडिंग समाप्त नहीं करेगा, क्योंकि सर्वर defostics.asp पृष्ठ को डिफ़ॉल्ट.asp पृष्ठ पर सेवा देने से पहले समाप्त होने का इंतजार कर रहा है। गतिरोध!

यह प्रत्येक आईआईएस 6 मशीन पर ठीक काम करता है, और मेरा मानना ​​है कि कुछ आईआईएस 7 सर्वर हैं जहां यह ठीक काम करता है।

मैंने सत्यापित किया है कि यह हमारे क्विर्की डायग्नोस्टिक का परिणाम नहीं है। एक मशीन से कई टैब लोड हो रहा है, या यहां तक ​​कि अलग मशीनें भी दिखाएंगी कि वेब प्रक्रिया उन्हें एक समय में संभालती है।


सही उत्तर AnthonyWJones द्वारा: सर्वर साइड डिबगिंग IIS7 में चालू किया गया था। यह आईआईएस को एकल थ्रेडेड मोड में रखता है।

+0

यहां क्रॉसपोस्ट किया गया http://forums.iis.net/p/1155632/1894991.aspx#1894991 –

+0

क्या आप लिख सकते हैं चयनित उत्तर का कौन सा हिस्सा मदद करता है? समस्या के पीछे क्या कारण था? –

+0

जब मैं पता लगाऊंगा तो मैं करूंगा। मुझे अभी तक पता नहीं है क्योंकि मैं अपनी मशीन पर दोबारा नहीं लगा सकता, सिर्फ एक ग्राहक (और वह छुट्टी पर है)। –

उत्तर

28

आईआईएस प्रबंधक में पेड़ में आवेदन पर क्लिक करें।

आईआईएस अनुभाग के तहत एएसपी डबल क्लिक करें।

विस्तृत "डिबगिंग गुण"

दोनों "क्लाइंट-साइड डीबगिंग सक्षम" सुनिश्चित करें और "सर्वर साइड डीबगिंग सक्षम" गलत पर सेट कर रहे हैं।

जब डिबगिंग सक्षम होती है तो एएसपी एक थ्रेड तरीके से एक समय में एक अनुरोध को संसाधित करने तक सीमित है।

+0

लगता है। – splattne

+0

मैंने वोट तय किया। मैं स्वीकार किए गए उत्तर को ठीक नहीं कर सकता क्योंकि मैं बाउंटी की समयसीमा समाप्त होने पर सत्यापित नहीं कर सका :( –

+0

@ माइकल: मान्यता के लिए धन्यवाद वोट ठीक हैं। मुझे पता है कि आपके जैसे लोगों के पास जीवन है और इसलिए बेहतर चीजें हैं एसओ पर क्या चल रहा है, इस पर ध्यान रखें कि हम में से कुछ जैसे – AnthonyWJones

0

आईआईएस 7 सबसे प्रमाणित रूप से बहु थ्रेडेड है, इसलिए मुझे लगता है कि आपके ऐप में कोई समस्या है।

आपने एक ही सर्वर से एक पृष्ठ लोड करने के लिए ActiveX का उल्लेख किया है - शायद यह ActiveX मुक्त थ्रेड नहीं है और यह प्रत्येक पृष्ठ का उपयोग करता है जो एकल उदाहरण चलाने के लिए उपयोग करता है?

Btw: वेब गार्डन - एक ही सर्वर कई प्रक्रियाओं का उपयोग - inprocess सत्र वेब फार्म का उपयोग नहीं कर सकते हैं - कई वेब सर्वर

+1

समस्या तब भी होती है जब आप दो एएसपी पेजों को लूप के साथ बनाते हैं (इसलिए वे थोड़ी देर के लिए निष्पादित होते हैं)। IIS7 पहले पृष्ठ को समाप्त होने तक दूसरा पृष्ठ प्रदर्शित नहीं करेगा, इसलिए यह ऐप के साथ कोई समस्या नहीं है। –

+0

यह ऐप के साथ समस्या होने से इसे खत्म नहीं करता है, यह ऐप के साथ एक समस्या होने की अधिक संभावना है। क्या आपने एक ही समय में मैन्युअल रूप से दो यूआरएल मारने की कोशिश की है? – cjk

0

सुनिश्चित करें कि asp.net 1 से अधिक कार्यकर्ता धागा उपयोग करने के लिए कॉन्फ़िगर किया गया है। This msdn article बताता है कि इस कॉन्फ़िगरेशन विकल्प को कैसे सेट करें।

+0

एएसपी पर लागू नहीं होता है। –

4

सबसे पहले: सुनिश्चित करें कि आप इसे एकाधिक ग्राहकों के साथ परीक्षण करें। एक ही कंप्यूटर एक ही सर्वर (आईपी एड्रेस) के साथ एक ही समय में केवल 2 HTTP अनुरोध करता है। (यह एक आरएफसी स्पीफिकेशन है।)

यदि यह आपकी समस्या का समाधान नहीं करता है, तो आईआईएस 7 -> एएसपी -> सेवाओं -> COM प्लस गुण -> एमटीए में निष्पादित करें। इस सेटिंग को "सही" पर सेट करने का प्रयास करें।

उम्मीद है कि इससे मदद मिलती है।

+1

एक एकल ग्राहक, एकल कंप्यूटर नहीं। इसके अलावा, कुछ ग्राहक पूरी तरह से इस पर ध्यान नहीं देते हैं। – FlySwat

+1

आईआईएस 7 में एएसपी/कॉमप्लस/executeInMTA संपत्ति आईआईएस 6 में AspExecuteInMTA के समान है। यह डिफ़ॉल्ट रूप से 0 है। यदि यह आईआईएस 6 में 1 पर सेट नहीं किया गया था, तो शायद यहमें मदद नहीं करेगा, वैसे भी, किसी को इस सेटिंग से सावधान रहना चाहिए, क्योंकि कुछ COM ऑब्जेक्ट्स बहु-थ्रेडेड वातावरण में गलत व्यवहार कर सकते हैं। –

+0

सच है कि कुछ COM + घटक दुर्भावनापूर्ण हो सकते हैं जब वे एक बहुप्रचारित वातावरण के लिए डिज़ाइन नहीं किए जाते हैं। फिर भी यह हो सकता है कि आपके एएसपी पेज इस मुद्दे पर बस "लटका" जाए ताकि यह कोशिश करने में कोई दिक्कत न हो। –

2

क्या आप वाकई अपने कोड में निर्भरता नहीं रखते हैं जो डेडलॉक पैदा कर रहा है। मैंने इसे पहले देखा है जहां लॉगिंग, एसक्यूएल कनेक्शन इत्यादि निर्भरता पैदा करता है। पेर्फॉन का प्रयोग करें और हार्ड डिस्क को पढ़ने/लिखने की कतार, मेमोरी रीड/राइट कतार देखें ताकि चीजें बैक अप हो रही हैं या नहीं।

मैं अत्यधिक जानकारी के लिए Tess Ferrandez's (ASP.NET Escalation Engineer - Microsoft) ब्लॉग की सलाह दूंगा और यह पता लगाने के लिए कि क्या हो रहा है। अधिकांश लोगों को कभी पता चलने की तुलना में टेस इस सामान के बारे में अधिक भूल गया है।

मुझे लगता है कि आपकी समस्या आईआईएस से संबंधित नहीं है, लेकिन आपके ऐप में कुछ है, शायद आपके ActiveX घटक में। सुनिश्चित करें कि आप अपने ActiveX घटक के बाद साफ़ करें। एक्सेल (एक और कॉम घटक) का उपयोग करने के बाद मैं साफ़ करने के लिए उपयोग किए जाने वाले कोड का एक टुकड़ा यहां दिया गया है। याद रखें कॉम प्रबंधित नहीं है।

Private Sub ShutDownExcel() 
    If objExcel IsNot Nothing Then 
     objExcel.DisplayAlerts = True 
     objExcel.Quit() 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel) 
     objExcel = Nothing 
    End If 

    ' Clean up memory so Excel can shut down. 
    GC.Collect() 
    GC.WaitForPendingFinalizers() 

    ' The GC needs to be called twice in order to get the 
    ' Finalizers called - the first time in, it simply makes 
    ' a list of what is to be finalized, the second time in, 
    ' it actually the finalizing. Only then will the 
    ' object do its automatic ReleaseComObject. 
    GC.Collect() 
    GC.WaitForPendingFinalizers() 
End Sub 

उम्मीद है कि इससे मदद मिलती है।

0

क्या आपने एप्लिकेशन क्लास पर "प्रबंधित पाइपलाइन मोड" को "क्लासिक" (डिफ़ॉल्ट "एकीकृत") में बदल दिया है? यदि नहीं, क्लासिक के साथ प्रयास करें।

मुझे नहीं पता कि यह किसी भी तरह से मदद करेगा या नहीं। मैंने बहुत पहले क्लासिक एएसपी ऐप्स को आईआईएस 7 के साथ काम करने के लिए लड़ने के लिए संघर्ष करना बंद कर दिया है। (ऐसा नहीं है कि मैं कह सकता हूं, ऐप्स वास्तव में अच्छे और सही हैं, लेकिन उन्होंने पिछले संस्करणों में काम किया था।)

और परीक्षण पृष्ठों के लिए बफरिंग बंद करने का प्रयास करें और उन्हें प्रत्येक पुनरावृत्ति में कुछ थूक दें। आईआईएस 7 में बफरिंग (और कैशिंग) बदल सकता है। हो सकता है कि वे सभी के बाद समवर्ती रूप से संसाधित हो जाएं और अंतर देखने के लिए बस बफर बहुत बड़े हैं।

यह सब मेरे दिमाग में आता है।


मुझे लगता है कि आप बहुत ही सरल मामले के साथ परीक्षण कर रहे हैं। आपका ऐप नहीं (न तो टेस्ट पेज और न ही global.asa) किसी भी अजीब ऑब्जेक्ट का उपयोग करता है जो दोनों अनुरोधों के लिए आम है और इसलिए लॉकिंग की आवश्यकता है।

+0

मैंने एकीकृत/क्लासिक सेटिंग की कोशिश की। उस पर कोई पासा नहीं। –

0

बस एक विचार लेकिन यदि आप आईआईएस में वेबसाइट पर जाते हैं, तो सीमाएं ... बाईं ओर लिंक पर क्लिक करें, कनेक्शन सीमाएं क्या निर्धारित हैं? वहां अधिकतम बैंडविड्थ और अधिकतम समवर्ती कनेक्शन विकल्प हैं।

मैं ऐप पूल पर भी जाऊंगा और उन्नत सेटिंग्स ... पर क्लिक करें और सीपीयू और मेमोरी सीमाओं की जांच करें। संभावित रूप से के साथ खरोंच से एक नया ऐप पूल भी बनाना, इसे प्रबंधित करने के लिए चयनित कोई प्रबंधित कोड नहीं चुना गया है।

0

यदि यह डीबग सेटिंग्स के साथ कोई समस्या नहीं है, तो मुझे पता चला है कि IIS 8 में एएसपी में सत्र चर का उपयोग करते समय आप समान व्यवहार का अनुभव कर सकते हैं।

मुझे नहीं पता कि यह आईआईएस 8 विशिष्ट है, लेकिन "एएसपी गारंटी देता है कि किसी भी समय सत्र से केवल एक ही अनुरोध निष्पादित किया जाएगा।" http://msdn.microsoft.com/en-us/library/ms972335.aspx

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