2012-09-25 12 views
11

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

यह समस्या Azure तक सीमित प्रतीत होती है क्योंकि हमें उसी डेटाबेस पर समान सेलेनियम परीक्षण चलाने के दौरान स्थानीय स्तर पर समस्या का सामना करना पड़ रहा है (SQL Azure) ताकि यह इंगित हो सके कि यह SQL Azure में आउटबाउंड डेटाबेस कनेक्टिविटी के साथ कुछ समस्या।

  1. Azure क्षणिक गलती से निपटने - हम के लिए जगह में तर्क पुन: प्रयास जब वहाँ एसक्यूएल Azure सेवा के साथ ही अस्थायी समस्या है है: अब तक हम निम्नलिखित की कोशिश की है।
  2. संचार प्रोटोकॉल बदलें - हमने दोनों टीसीपी और नामित पाइप्स दोनों की कोशिश की है और हम दोनों के साथ एक ही समस्या का सामना करते हैं।
  3. डेटाबेस कनेक्शन टाइमआउट अंतराल समायोजित करें - हमने को बढ़ाने का प्रयास नहीं किया है।
  4. एकाधिक सक्रिय परिणाम समूह का जोड़ - हमने इसे कनेक्शन स्ट्रिंग में कोई फायदा नहीं हुआ है।
  5. प्रत्येक क्वेरी पर कनेक्शन स्टेट चेक - जब हम डेटाकॉन्टेक्स्ट लौटते हैं तो हम इसके कनेक्शन की जांच करते हैं और जहां आवश्यक हो फिर से खोलते हैं।
  6. कनेक्शन पूलिंग बंद कर दिया - हमने सफलता के बिना भी इसका प्रयास किया है।
  7. बदला गया डिजाइन पैटर्न - हम भी काम डिजाइन पैटर्न, जहां डेटाबेस कनेक्शन थे ऊपर निकाल दिया जा रहा है और काम के हर इकाई के बाद का निपटारा की एक यूनिट को लागू करने की लंबाई करने के लिए चला गया, लेकिन इस आलसी लोड हो रहा है के साथ कहीं और कारण होने वाली समस्याओं , विधियों में ऑब्जेक्ट्स पास करना और यह बिंदु पर बहुत अधिक पुनर्विक्रय होता।

  8. बदलें भूमिका आकार - अंत में मैं कोशिश करने के लिए सोच सकते हैं विंडोज Azure में किसी भी अंतर्निहित कनेक्शन संबंधी प्रतिबंधों के मामले अप भूमिका आकार करने के लिए है - कि वर्तमान की तैनाती है, इसलिए वहाँ अभी भी आधे से एक मौका यह काम हो सकता है है!

    • DataContext वर्ग (DbContext फैली) जो एक कोड पहले एफई संदर्भ है:

साइट बुनियादी सुविधाओं के इस प्रकार है।

  • बिजनेसलेयर क्लास में एक निजी, गैर स्थैतिक डेटा कॉन्टेक्स्ट होता है। डेटाकॉन्टेक्स्ट कन्स्ट्रक्टर प्रत्येक प्रबंधक/हेल्पर क्लास में इंजेक्शन दिया गया है।
  • BusinessLayerService क्लास में सार्वजनिक, थ्रेड स्थिर बिजनेसलेयर उदाहरण शामिल है।
  • एमवीसी साइट BusinessLayerService का उपयोग करती है। प्रबंधक कक्षाओं तक पहुंचने के लिए जो डेटाकोन्टेक्स्ट को क्वेरी और अद्यतन करते हैं, उन्हें पारित किया गया है।
  • किसी भी मदद की सराहना की जाएगी।

    अद्यतन: हमने वीएम आकार को मध्यम तक बढ़ा दिया और इसका मतलब यह था कि एक ही समस्या को और अधिक समय लगता था।

    जब मुद्दों घटित शुरू कर दिया, एक टीम के सदस्य के विख्यात निम्न अपवाद उत्पन्न हुई:

    InvalidOperationException: आदेश का निष्पादन एक खुली और उपलब्ध कनेक्शन की आवश्यकता है। कनेक्शन की वर्तमान स्थिति टूट गई है।

    यह तब भी शुरू हुआ जब डेटाबेस को मारा जा रहा था (कोड के एक निश्चित क्षेत्र के लिए विशिष्ट नहीं था)।

    +1

    उत्कृष्ट सवाल। +1 –

    +0

    क्या आपने ईएफ के बजाय क्लासिक ADO.Net दृष्टिकोण के साथ प्रयास किया है? मुझे बताया गया था कि एसक्यूएल एज़ूर के साथ काम करते समय लोगों को एडीओ.Net की तुलना में ईएफ के साथ और अधिक समस्याएं थीं। –

    +1

    @GauravMantri समस्या, सभी उपयोग एफई है इस और विभिन्न अन्य परियोजनाओं हम पहले से ही जंगल में वहाँ बाहर है, तो ADO.NET का उपयोग करने जा होगा दोनों एक समय लेने वाली और महंगा प्रक्रिया :) – mattytommo

    उत्तर

    5

    मुझे इस तरह के मुद्दे का सामना करना पड़ा है। मेरे मामले में यह एंटिटी फ्रेमवर्क ऑब्जेक्ट कॉन्टैक्स के साथ ठीक से निपटने के लिए नहीं किया गया था, अंततः बहुत से संदर्भों को खत्म कर दिया गया था और साइट पर गिरावट आई थी। हमने एंटिटी फ्रेमवर्क प्रोफाइलर का उपयोग करके पहचाना है कि त्रुटियों को फेंकने पर अनलॉक ऑब्जेक्ट कॉन्टेक्सट्स के बहुत सारे थे।

    हमारे लिए वर्क डिज़ाइन पैटर्न (या इसी तरह) के यूनिट में जाने के लिए यह संभव नहीं था क्योंकि इसे व्यापार परत की पुन: लिखना आवश्यक था, इसलिए, हमने प्रत्येक पृष्ठ अनुरोध के बाद ऑब्जेक्ट कॉन्टेक्स को मैन्युअल रूप से बंद करके इसे हल किया । हमने Global.asax के अंतिम अनुरोध ईवेंट में संदर्भ को मैन्युअल रूप से संदर्भित करने के दृष्टिकोण को अपनाया है, हालांकि, अन्य मान्य दृष्टिकोण HttpContext में संदर्भ को संग्रहीत करना होगा या एक प्रति अनुरोध के साथ एक आईओसी कंटेनर (जैसे कैसल विंडसर) को लागू करना होगा। "जीवनशैली।

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