7

में चल रहा है इसमें व्याख्या करने में कुछ समय लग सकता है, लेकिन यहां मैं जाता हूं :)।नियंत्रक क्रियाएं कई बार हिट होती हैं - एएसपी.नेट एमवीसी 4 ऐप एज़ूर एमुलेटर

मैं दो Visual Studio 2012 परियोजनाओं बनाया: (वेब ​​-> ASP.NET MVC 4 वेब अनुप्रयोग)

  1. का उपयोग कर एक परियोजना दृश्य स्टूडियो के में टेम्पलेट परियोजना जोड़े संवाद। मैंने यूनिट टेस्ट प्रोजेक्ट नहीं जोड़ा।
  2. Azure क्लाउड सेवा टेम्पलेट (क्लाउड -> विंडोज़ Azure क्लाउड सेवा) का उपयोग कर एक प्रोजेक्ट। मैंने एक भूमिका निभाई, एक एएसपी.नेट एमवीसी 4 वेब रोल, और फिर एक यूनिट टेस्ट प्रोजेक्ट नहीं जोड़ा।

मैंने इन दोनों परियोजनाओं को पूरी तरह से छीन लिया जिस तरह से विजुअल स्टूडियो ने उन्हें मेरे लिए बनाया था।

प्रत्येक परियोजना के लिए, मैं तो HomeController वर्ग के पास गया और About और Contact कार्रवाई विधियों (बोरिंग कार्रवाई है कि सिर्फ एक दृश्य वापसी) में से प्रत्येक में एक ब्रेकपाइंट निर्धारित किया है। उदाहरण के लिए, मैं विधि में केवल लाइन पर एक ब्रेकपाइंट सेट:

public ActionResult About() 
{ 
    return View(); 
} 

मैं तो पहली परियोजना (गैर Azure परियोजना) डिबगिंग शुरू कर दिया। सब कुछ अपेक्षित था - यानी जब मैं ब्राउजर का उपयोग के बारे में और संपर्क पृष्ठों के बीच नेविगेट करने के लिए करता हूं, तो संबंधित कार्रवाई विधियों में ब्रेकपॉइंट प्रत्येक अनुरोध पर एक बार मारा जाएगा। मुझे ठीक लगता है।

मैंने फिर Azure प्रोजेक्ट को डीबग करना शुरू कर दिया। मैंने के बारे में और संपर्क पृष्ठों के बीच नेविगेट करने की एक ही प्रक्रिया का पालन किया। इस बार मुझे दिलचस्प गैर-निर्धारक व्यवहार मिला। कुछ अनुरोधों पर, पृष्ठ को प्रस्तुत करने से पहले कार्रवाई विधि में ब्रेकपॉइंट कई बार (कभी-कभी दो बार से अधिक) मारा जाएगा। कभी-कभी अनुरोध केवल लटका होगा और पृष्ठ प्रस्तुत नहीं करेगा (प्रतीक्षा के कुछ मिनटों के बाद भी)।

मुझे यह जानना है कि यह क्यों हो रहा है, क्योंकि यह एक और Azure एमवीसी अनुप्रयोग में अधिक जटिल चीजों को प्रभावित कर रहा है जिस पर हम काम कर रहे हैं (उदाहरण के लिए इस समस्या के कारण आवेदन दो या दो से अधिक उदाहरण बनाने का प्रयास कर सकता है एक अनुरोध के लिए मेरे डेटाबेस में एक मॉडल ऑब्जेक्ट)।

मैं निम्नलिखित वातावरण में कर रहा हूँ: Visual Studio 2012

  • के लिए

    • Windows 8 प्रो (64)
    • Visual Studio 2012 अंतिम
    • विंडोज Azure एसडीके IIS 8 एक्सप्रेस
    • फायरबग के साथ फ़ायरफ़ॉक्स ब्राउज़र (आईई का उपयोग कर व्यवहार की पुष्टि भी)
    • एसक्यूएल सर्वर 2012 (वास्तव में मुझे अनुमान नहीं है)

    केवल दिलचस्प बात यह है कि मैंने देखा है कि निम्न चेतावनी संदेश जब भी मैं Azure परियोजना डिबग दृश्य स्टूडियो में आउटपुट विंडो में आता है:

    में 81 को निजी पोर्ट 80 पुन: मापन अनुकरण के दौरान संघर्ष से बचने के लिए 'My_Web_Role_Name' भूमिका।

    शायद इस रीमेपिंग के साथ कुछ करने के लिए कुछ है। फिर फिर, netstat -ano करने के बाद मैंने देखा कि एज़ूर डेवलपमेंट फैब्रिक प्रक्रिया पोर्ट 80 पर सुन रही है, इसलिए शायद यही कारण है कि इसे रीमेपिंग करने की ज़रूरत है ... काफी उचित लगता है।

    वैसे भी, मुझे उम्मीद है कि किसी को यह विचार हो सकता है कि इस व्यवहार के कारण क्या हो सकता है। यहाँ कुछ अतिरिक्त अंक हैं और दृष्टिकोण मैंने कोशिश की:

    • रीसेट आईआईएस, पुनः आरंभ Azure कंप्यूट/भंडारण एमुलेटर, पूरे मशीन
    • पट्टी को पुनः आरंभ सभी स्क्रिप्ट के विचारों का (यानी व्यवहार अभी भी वहाँ है, तो पृष्ठों बस है उन पर एक बुनियादी HTML अनुच्छेद)
    • मैंने प्रासंगिक आईआईएस एक्सप्रेस लॉग फ़ाइलों को खोजने की कोशिश की, लेकिन ऐसा लगता है कि Azure परियोजनाएं अन्य परियोजनाओं की तरह आईआईएस एक्सप्रेस के माध्यम से नहीं चलती हैं (क्या यह सही है?)।
    • मैंने एज़ूर कंप्यूट एमुलेटर कंसोल की निगरानी की ... वहां कुछ भी दिलचस्प नहीं है।

    तो ... अंत में, कुछ सवाल:

    • किसी और इस व्यवहार को पुनः कर सकते हैं?
    • क्या एज़ूर एमुलेटर द्वारा उत्पन्न कोई अतिरिक्त लॉग है जो मेरी मदद कर सकता है?

    मैं वास्तव में यहां सही दिशा में एक धक्का की सराहना करता हूं :)।

    चीयर्स!

    संपादित

    यहाँ कुछ अधिक जानकारी (के रूप में मैं इस समस्या को डिबग करने के लिए जारी रखने के लिए मैं इस सवाल को अद्यतन करने कर रहा हूँ) है:

    मैं डिबगिंग के बिना समाधान चलाने का फैसला किया है, और मैं कुछ सरल में डाल दोनों About और Contact कार्रवाई तरीकों में डिबग संदेश, उदाहरण के लिए:

    public ActionResult About() 
    { 
        System.IO.File.AppendAllText(@"c:\Logs\azure.log", DateTime.Now + ": Contact, thread " + System.Threading.Thread.CurrentThread.ManagedThreadId + "\r\n"); 
        return View(); 
    } 
    

    मैं इस फ़ाइल और भी स्टार के Tail संलग्न HTTP पर क्या चल रहा था यह देखने के लिए Fiddler पर टेड करें।

    पूंछ से:: फिर से दो About और Contact लिंक के बीच नेविगेट करना, मैं निम्नलिखित उत्पादन देखा

    • ...
    • 9/12/2012 12:14:07 PM: के बारे में, धागा 7
    • 9/12/2012 12:14:08 PM पर: संपर्क, धागा 7
    • 9/12/2012 12:14: 09 बजे: के बारे में, धागा 7
    • 9/12/2012 12:14:10 PM पर: संपर्क, धागा 7
    • 9/12/2012 12:14:11 PM: के बारे में, धागा 6
    • 9/12/2012 12:14:12 अपराह्न: संपर्क, धागा 8
    • 9/12/2012 12:14:31 अपराह्न: संपर्क, धागा 7
    • 9/12/2012 12:14:50 PM पर: संपर्क, धागा 7
    • 9/12/2012 12:15:03 PM: के बारे में, धागा 7
    • 9/12/2012 12: 15:05 PM: संपर्क, धागा 8
    • 9/12/2012 12:15:23 PM: के बारे में, धागा 6
    • 9/12/2012 12:15:42 PM: के बारे में, धागा 14
    • 9/12/2012 12:16:01 PM: के बारे में, धागा 6
    • 2012/09/12 12:16:31: संपर्क, धागा 7
    • 9/12/2012 12:16:33 PM: के बारे में, धागा 14
    • ...
    • 9/12/2012 12:17:08: संपर्क, धागा 12
    • 9/12/2012 12:17:09 PM: के बारे में, धागा 12
    • 9/12/2012 12:17:28 PM: के बारे में , धागा 5
    • ...
    ,210 एक ही अनुरोध (ध्यान दें कि मैं भी कोई लाभ नहीं हुआ मेरी भूमिका endpoint सेटिंग्स के साथ चारों ओर खेलने गया है,) के लिए

    फ़िडलर से:

    Fiddler screenshot showing HTTP traffic

    तो ... ले घर संदेश इसमें हैं :

    • HTTP ट्रैफ़िक सामान्य लगता है (फ़िडलर किसी भी डुप्लिकेट अनुरोध नहीं दिखा रहा है)
    • कार्रवाई तरीकों दो बार या तीन बार एक ही अनुरोध के लिए कभी कभी कहा जा रहा है, मालूम होता है गैर निर्धारणात्मक (यानी ऊपर वर्णित मूल समस्या)
    • दिलचस्प बात यह है कि, मेरी स्थिति में, ऐसा लगता है कि बिल्कुल 1 9 कार्यवाही पर एक और 'हिट' होता है (यानी जब कार्रवाई विधियों को कई बार मारा जा रहा है, तो बीच का अंतर हिट नियतात्मक है)
    • धागा आईडी आम तौर पर प्रत्येक हिट के लिए अलग हैं जब भी कार्रवाई के तरीकों को कई बार

    मैं गहराई रखेंगे मारा जाता है ... शायद किसी तरह पर्याप्त एक सुझाव की पेशकश करने के होगा हालांकि इस अद्यतन जानकारी के आधार पर :)।

    संपादित 2 मैं प्रत्येक मामले में कार्रवाई विधि के अंदर धागा आईडी के साथ बाहर प्रक्रिया ID मुद्रित करने के लिए फैसला किया। प्रत्येक अनुरोध के लिए, प्रक्रिया आईडी आईआईएस एक्सप्रेस वर्कर प्रक्रिया से संबंधित थी। तो ऐसा लगता है कि आईआईएस एक्सप्रेस वर्कर प्रक्रिया कभी-कभी अनुरोध को संभालने के लिए कई धागे उत्पन्न करती है, प्रत्येक 1 9 के अलावा।

    ... और मुझे जाना गहरी ... :)

    संपादित 3

    मुझे लगता है कि मैं इस समस्या के करीब हो रही है ... मैं आईआईएस एक्सप्रेस ट्रे पर एक नज़र था और बाद मैं आवेदन (डिबगिंग के बिना) शुरू की थी निम्नलिखित देखा:

    IIS Express window showing the IIS Application running under the web role

    मैं (जैसा कि ऊपर फ़िडलर में दिखाया गया 127.0.0.2:8888 के बजाय) सीधे इस URL का उपयोग करने का फैसला किया है, और समस्या से दूर जाने के लिए उत्सुक। अब यह समझ में आ रहा है ... अगर मैं आईआईएस आवेदन सीधे बंदरगाह 8889 पर आमंत्रित करता हूं, तो सब कुछ ठीक काम करता है जैसा कि मूल गैर-एज़ूर परियोजना के साथ किया गया था। अगर मैं बंदरगाह 8888 पर वेब भूमिका (यानी Azure- विशिष्ट भाग) का आह्वान करता हूं, तो कभी-कभी आईआईएस एप्लिकेशन को कई बार आमंत्रित करना प्रतीत होता है।

    तो मैं अब वेब भूमिका पर अपना ध्यान केंद्रित करना शुरू कर रहा हूं। मुझे लगता है मैं कुछ प्रासंगिक वेब भूमिका लॉग पाते हैं या नहीं की कोशिश करता हूँ ...

    संपादित 4

    मुझे यकीन है कि diagnostics was set up properly आवेदन पर किए गए और डिबग मोड में यह भाग गया। मैं फिर एज़ूर कंप्यूट एमुलेटर यूआई में गया, मेरे वेब-रोल इंस्टेंस पर राइट-क्लिक किया, और "ओपन लोकल स्टोर" चुना। यह मुझे एक्सप्लोरर में ले गया, जहां मैं एक बच्चे फ़ोल्डर "temp \ temp \ RoleTemp \ iisexpress" ढूंढने में सक्षम था, जिसमें इस तरह की सामग्री के साथ एक लॉग फ़ाइल थी (ध्यान दें कि मैंने अपना एंडपॉइंट वापस पोर्ट 80 में बदल दिया है , तो आईआईएस एक्सप्रेस आवेदन अब बंदरगाह 81) पर वापस आ गया है:

    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/About
    • अनुरोध समाप्त हो गया: 127.0.0.1:81/Home/About HTTP स्थिति के साथ 200.0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/Contact
    • अनुरोध समाप्त हो गया: 127.0.0.1:81/Home/Contact HTTP स्थिति के साथ 200,0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/Contact
    • अनुरोध समाप्त हो गया: 127.0.0.1:81/Home/Contact HTTP स्थिति के साथ 200,0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/Contact
    • अनुरोध समाप्त हो गया: 127.0.0.1:81/Home/Contact HTTP स्थिति के साथ 200,0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0 .1: 81/होम/लगभग
    • अनुरोध समाप्त हुआ: 127.0.0.1:81/Home/ HTTP स्थिति 200 के साथ।0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/About
    • अनुरोध समाप्त हो गया: 127.0.0.1:81/Home/About HTTP स्थिति 200,0
    • अनुरोध शुरू कर दिया साथ: "GET" 127.0.0.1:81/Home/About
    • अनुरोध समाप्त हो गया: 127.0.0.1:81/Home/About HTTP स्थिति के साथ 200,0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/ घर/संपर्क
    • अनुरोध समाप्त हो गया: 127.0.0.1:81/Home/Contact HTTP स्थिति के साथ 200,0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/Contact
    • अनुरोध समाप्त हो गया: 127.0 .0.1: 81/होम/HTTP स्थिति के साथ संपर्क 200,0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/Contact
    • अनुरोध समाप्त हो गया: साथ 127.0.0.1:81/Home/Contact HTTP स्थिति 200.0
    • अनुरोध शुरू कर दिया: "GET" 127.0.0.1:81/Home/About
    • अनुरोध समाप्त हो गया: "GET" 127.0.0.1: 127.0.0.1:81/Home/About HTTP स्थिति के साथ 200.0
    • अनुरोध शुरू कर दिया : 81/होम/संपर्क
    • अनुरोध समाप्त हो गया: HTTP स्थिति 200,0

    फिर मैं तो बस के बारे में और संपर्क पृष्ठों के बीच टॉगल किया गया था के साथ 127.0.0.1:81/Home/Contact, इसलिए से लॉग एक देख सकते हैं कि एक वेब-रोल एंडपॉइंट अनुरोध कभी-कभी वेब भूमिका में आईआईएस एप्लिकेशन को कई बार बुलाता है। अब कुछ उच्च स्तरीय वेब-रोल लॉग की खोज करने के लिए यह पता लगाने के लिए कि यह क्यों कर रहा है :)!

  • +0

    आपकी समस्या के बारे में निश्चित नहीं है लेकिन मैं आपको बता सकता हूं कि रीमेपिंग काफी सामान्य है - मेरा एज़ूर एमुलेटर हर बार ऐसा करता है और मुझे एमवीसी 4 के साथ कोई समस्या नहीं है। – JcFx

    उत्तर

    0

    तो मैं मूल पोस्ट के विभिन्न संपादन में क्या लिखा है के आधार पर:

    • मेरी मशीन पर कम से कम, DevFC.exe प्रक्रिया (विकास कपड़े, Azure गणना एमुलेटर) कभी कभी के लिए एकाधिक अनुरोध को उत्पन्न करने के है आईआईएस एक्सप्रेस से अनुरोधित संसाधन। यही है, यह एमुलेटर एंडपॉइंट पर एक ही अनुरोध लेगा, और कभी-कभी अंतर्निहित आईआईएस एक्सप्रेस एप्लिकेशन के लिए कई अनुरोधों को एक-दूसरे के बाद बढ़ाएगा, भले ही वे सभी HTTP स्टेटस कोड 200 के साथ सफल हों। इन स्पॉन्डेड अनुरोधों के बीच का समय अंतर स्थिर होने के लिए, लेकिन इसके अलावा, व्यवहार गैर-निर्धारिती लगता है (यानी यह एमुलेटर एंडपॉइंट के हर अनुरोध के लिए नहीं होता है)।
    • इसे डीबग करने के लिए, मुझे एज़ूर कंप्यूट एमुलेटर के स्रोत कोड तक पहुंच की आवश्यकता होगी, जिसे मैं अनुमान लगा रहा हूं कि मुझे नहीं मिल सकता है।

    अब, मेरा सिद्धांत (और आशा) यह है कि यह व्यवहार किसी भी तरह से मेरे विकास पर्यावरण के लिए विशिष्ट है और वास्तविक Azure बुनियादी ढांचे पर पुन: उत्पन्न नहीं किया जाएगा। उस ने कहा, मैं एक वर्कअराउंड के साथ आया हूं ...

    मैंने फ़ायरफ़ॉक्स के लिए आईआईएस एक्सप्रेस एप्लिकेशन पोर्ट में अपने स्थानीय एज़ूर एमुलेटर पोर्ट पर जाने वाले सभी ट्रैफिक को रीडायरेक्ट करने के लिए एक साधारण प्रॉक्सी फ़ाइल बनाई है।यह समस्या हल करता है, हालांकि मुझे पता है कि मैं अनिवार्य रूप से एज़ूर एमुलेटर को छोड़ रहा हूं, और मुझे लगता है कि मुझे भविष्य में समस्याएं हो सकती हैं क्योंकि मैं ऐसा कर रहा हूं (उदाहरण के लिए यदि मैं ऐपफ़ैब्रिक कैश का उपयोग करने का निर्णय लेता हूं?)!

    औसत समय में मैं विकास के लिए इस कार्यवाही के साथ जारी रखूंगा और समय-समय पर परीक्षण के लिए अपने एज़ूर स्टेजिंग पर्यावरण पर तैनात रहूंगा।

    भले ही कोई जानता है कि मैं मौलिक समस्या का समाधान कैसे कर सकता हूं, मुझे बताएं! :)

    संपादित करें: अब मैं Azure SDK टूल्स के संस्करण 2.2 का उपयोग करके समस्या को पुन: उत्पन्न करने में सक्षम नहीं हूं। यदि आप अभी भी इस व्यवहार को देख रहे हैं, तो उन्नयन करने का प्रयास करें!

    +0

    मुझे नहीं लगता कि आप एमुलेटर पर भार संतुलन या स्वास्थ्य जांच स्थापित कर सकते हैं (इसे कभी देव में नहीं किया, लेकिन इसे प्रोड में किया), लेकिन मुझे आश्चर्य है कि यह है ... उन स्वास्थ्य जांच पिंग्स Azure में होते हैं prod। इसके अलावा, एज़ूर स्टोरेज को भी प्रोड में पिंग किया जाता है। क्या आप Azure SDK 1.8 चला रहे हैं? –

    +0

    हाय बार्ट, आपकी प्रतिक्रिया के लिए धन्यवाद। मैं वास्तव में Azure एसडीके 1.8 चल रहा हूँ। मैंने इसका लाभ उठाने की कोशिश की, इसका कोई फायदा नहीं हुआ। .NET परावर्तक समर्थक जैसे कुछ का उपयोग करके इसे डीबग करने का प्रयास करने से कम, मुझे यकीन नहीं है कि मैं कैसे आगे बढ़ सकता हूं (जैसा कि मैंने ऊपर बताया है, यह मेरे लिए भी कम प्राथमिकता है)। मुझे सिर्फ यह जानने में दिलचस्पी होगी कि कोई और इस व्यवहार को पुन: उत्पन्न कर सकता है, और यदि ऐसा है तो मैं इसे माइक्रोसॉफ्ट कनेक्ट पर ला सकता हूं। – sammy34

    +0

    ओएमजी, मुझे अंततः एक ही समस्या के साथ किसी को मिला ... मैं आपके जैसे सटीक कॉन्फ़िगरेशन चला रहा हूं, यानी अज़ूर एसडीके 1.8 के साथ विंडोज 8 पर विजुअल स्टूडियो 2012 और मुझे बिना किसी बार के क्रियाओं का एक ही अजीब व्यवहार मिलता है ब्राउज़र से कई अनुरोध! यह वास्तव में गैर-निर्धारिती प्रतीत होता है और उन कार्यों में होता है जो पूरा करने में कुछ समय लेते हैं (लेकिन यह केवल एक छाप हो सकता है)। मुझे अभी तक कोई कामकाज नहीं मिला है और मैं काफी हताश हूं क्योंकि यह वास्तव में मेरे काम को धीमा कर देता है। क्या आपने तब से कोई प्रगति की है? क्या आपने पूर्ण आईआईएस में एमुलेटर चलाने की कोशिश की है? – ThomasWeiss

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