2008-09-27 11 views
7

मेरे पास एक ऐसा एप्लिकेशन है जो बहुत सारे सिरदर्द पैदा कर रहा है। यह एक वेब सेवा के माध्यम से SQL सर्वर 2005 से कनेक्ट एक .NET ऐप है। कार्यक्रम में ग्रिड है जो लंबे समय से चलने वाली संग्रहीत प्रक्रिया से भरा हुआ है जो समय-समय पर प्रवण होता है। इस मामले में जब यह समय समाप्त हो जाता है और एक एसक्यूएलएक्सप्शन फेंक दिया जाता है, तो कनेक्शन बंद करने के लिए कोई निष्पादन हैंडलिंग नहीं होती है।त्रुटि के बाद डेटाबेस कनेक्शन बंद न करने के क्या परिणाम हैं?

इस स्थिति के वास्तविक परिणाम क्या हैं? मुझे लगता है कि ढांचा या एसक्यूएल सर्वर शायद इसे एक तरह से या किसी अन्य का ख्याल रखता है लेकिन मुझे यकीन नहीं है।

अतिरिक्त कार्यक्रम हमेशा सुबह में अच्छी तरह से काम करता है, लेकिन एक घंटे या उससे भी अधिक समय के बाद यह मूल रूप से काम करना बंद कर देता है। मुद्दा यह नहीं है कि मुझे नहीं पता कि कनेक्शन को सही तरीके से कैसे कोड किया जाए। मुझे यह जानने की ज़रूरत है कि क्या इन लक्षणों को अनजान कनेक्शन से परेशान किया जा सकता है। यह उत्पादन कोड बदलने के लिए एक बड़ा सौदा है और मैं जानना चाहता हूं कि इस मुद्दे के लिए कम से कम संभव है।

निष्कर्ष मैंने सैकड़ों एक साथ कनेक्शन पर होने वाली विफलता को इंजीनियर किया। मैं कभी भी पर्यावरण वातावरण में विफलता की स्थिति को पुन: उत्पन्न करने में सक्षम नहीं था। सर्वोत्तम प्रथाओं को सही के रूप में चिह्नित किया गया। सबको धन्यवाद।

+0

मुझे लगता है कि टैग एसक्यूएल सर्वर होना चाहिए और दो अलग-अलग टैग नहीं होना चाहिए क्योंकि प्रश्न –

+0

प्रदर्शित किए गए हैं। धन्यवाद। –

+0

ऐसा लगता है कि आप कनेक्शन पूलिंग अपने उत्पादन वातावरण में चालू कर दिया है। पर पूलिंग के साथ, कनेक्शन बंद हो जाती हैं नहीं है, भले ही आप उन्हें बता बंद करने के लिए है, तो इससे कोई फर्क नहीं होगा कि आप उन्हें बंद करने नहीं कर रहे हैं। – MusiGenesis

उत्तर

6

एक SqlConnection बंद कर देता है के बाद से जब मैं आम तौर पर इस वाक्य रचना

using (SqlConnection conn = new SqlConnection()) 
{ 
    // SqlCode here 
} 
2

एक कनेक्शन सीमा है; यदि आपका ऐप अक्सर क्रैश हो जाता है और कनेक्शन को स्वचालित रूप से बंद नहीं करता है, तो नए कनेक्शन अनुरोधों से इनकार कर दिया जाएगा।

उस ने कहा, कनेक्शन बंद होने पर कुछ समय बाद कनेक्शन समाप्त हो जाते हैं।

0

आप कनेक्शन उपलब्ध से बाहर चलाने सकता है अगर यह अक्सर enought होता है, आप अंत में हर जगह आप एक आदेश पर अमल एक का उपयोग कनेक्शन बंद करने के लिए करना चाहिए।

0

कचरा कलेक्टर अंततः आपके खुले कनेक्शन ऑब्जेक्ट को अंतिम रूप देगा, लेकिन आपको नहीं पता कि जीसी अगली बार कब आता है। तब तक यदि आपके पास बहुत अधिक ट्रैफ़िक है या यह एक साझा एसक्यूएल सर्वर है तो आप अपने पूल में कनेक्शन से बाहर हो सकते हैं।

क्यों अपने प्रयास/पकड़ ब्लॉक के अंत में इसे निपटाना नहीं है?

finally 
{ 
    if (cn != null) 
    { 
     cn.Dispose(); 
     cn = null; 
    } 
} 

यह स्पष्ट रूप से वेब सेवा विधि में किया जाना चाहिए।

+0

कि स्वचालित रूप से एक का उपयोग कर ब्लॉक में –

+0

सच किया जाता है, लेकिन स्पष्ट रूप से वह "का उपयोग" है न ... – Codewerks

+0

क्यों एक सही जवाब नीचे वोट? मुझे लगता है कि नहीं मिलता है ... – Codewerks

0
try 
{ 
    sqlCommandObject.Execute(); // this line will throw a timeout exception 
} 
finally 
{ 
    sqlConnectionObject.Close(); // this will execute no matter what happens 
} 
+0

मुझे लगता है कि एमएस और दूसरों से सिफारिश निपटान (उपयोग करने के लिए किया गया था) के रूप में या पाब्लो ने कहा, एक ब्लॉक का उपयोग। निपटान() कॉल ऑब्जेक्ट पर बंद करें(), और यदि आवश्यक हो तो अन्य सफाई करता है। – Codewerks

+0

यह उत्तर "सही" है। http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx "बंद करें और निपटान कार्यात्मक रूप से समकक्ष हैं।" –

1

एप्लिकेशन लगभग एक घंटे के बाद काम करना बंद कर देता है, तो वह निश्चित रूप से कनेक्शन बंद कर दिया निपटाए नहीं किया जा रहा/की वजह से हो सकता है।

1

यही कारण है कि 'का उपयोग' कीवर्ड बहुत महत्वपूर्ण है जब ADO.Net

using (SqlConnection conn = new SqlConnection()) 
{ 
    ... 
} 

यह एक प्रकार का सैन्य बलों का इस्तेमाल है का उपयोग निपटान IDISpose इंटरफेस का उपयोग कर ADO.Net ऑब्जेक्ट पर निर्धारक कचरा संग्रह।

अधिकांश डेटाबेस कोड उस उद्देश्य के लिए बहुत से घोंसला वाले 'उपयोग' खंडों का उपयोग करते हैं।

+0

पहचान इंजन के पास कचरा संग्रह से कोई लेना देना नहीं है। यह अप्रबंधित संसाधनों की निर्धारणात्मक रिलीज को मजबूर करता है। – Joe

+0

जो, आपका कथन गलत है। पहचान के पास अप्रबंधित संसाधनों के साथ कुछ भी नहीं है। उदाहरण के लिए http://www.codeproject.com/KB/mcpp/garbage_collection.aspx देखें। – kervin

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