क्या मैं कनेक्शन स्ट्रिंग को संशोधित करके टाइमआउट बढ़ा सकता हूं web.config
?
क्या मैं कनेक्शन स्ट्रिंग को संशोधित करके टाइमआउट बढ़ा सकता हूं web.config
?
जवाबों:
हां, आप ;Connection Timeout=30
अपने कनेक्शन स्ट्रिंग में संलग्न कर सकते हैं और अपनी इच्छानुसार मूल्य निर्दिष्ट कर सकते हैं।
Connection Timeout
प्रॉपर्टी में सेट किया गया टाइमआउट मान कुछ ही सेकंड में व्यक्त किया गया समय है । यदि यह गुण सेट नहीं है, तो कनेक्शन के लिए टाइमआउट मान डिफ़ॉल्ट मान (15 सेकंड) है।
इसके अलावा, टाइमआउट मान सेट करते हुए 0
, आप यह अनुमान लगा रहे हैं कि कनेक्ट करने का आपका प्रयास अनंत समय का इंतजार कर रहा है। जैसा कि प्रलेखन में वर्णित है, यह कुछ ऐसा है जिसे आपको अपने कनेक्शन स्ट्रिंग में सेट नहीं करना चाहिए:
0 का मान किसी सीमा को इंगित नहीं करता है, और एक कनेक्शनस्ट्रीमिंग में बचा जाना चाहिए क्योंकि कनेक्ट करने का प्रयास अनिश्चित काल तक प्रतीक्षा करता है।
हममम ...
जैसा कि डारिन ने कहा, आप एक उच्च कनेक्शन टाइमआउट मान निर्दिष्ट कर सकते हैं, लेकिन मुझे संदेह है कि यह वास्तव में मुद्दा है।
जब आपको कनेक्शन टाइमआउट मिलता है, तो यह आमतौर पर निम्न में से एक के साथ एक समस्या है:
नेटवर्क कॉन्फ़िगरेशन - आपके वेब सर्वर / देव बॉक्स और SQL सर्वर के बीच धीमा कनेक्शन। समय-सीमा बढ़ाना इसे सही कर सकता है, लेकिन अंतर्निहित समस्या की जांच करना बुद्धिमानी होगी।
संबंध तार। मैंने ऐसे मुद्दों को देखा है जहां एक गलत उपयोगकर्ता नाम / पासवर्ड किसी कारण से, वास्तविक त्रुटि के बजाय एक टाइमआउट त्रुटि देगा "संकेत से वंचित।" ऐसा नहीं होना चाहिए, लेकिन ऐसा ही जीवन है।
कनेक्शन स्ट्रिंग 2: यदि आप सर्वर का नाम गलत तरीके से (उदाहरण के लिए, निर्दिष्ट कर रहे हैं, या अधूरे हैं mysqlserver
के बजाय mysqlserver.webdomain.com
), आप एक समय समाप्ति मिलेगा। क्या आप कमांड लाइन से कनेक्शन स्ट्रिंग में निर्दिष्ट सर्वर नाम का उपयोग करके सर्वर को पिंग कर सकते हैं ?
कनेक्शन स्ट्रिंग 3: यदि सर्वर का नाम आपके DNS (या होस्ट्स फ़ाइल) में है, लेकिन एक गलत या दुर्गम आईपी की ओर इशारा करता है, तो आपको मशीन-नहीं-पाया-ईश त्रुटि के बजाय एक टाइमआउट मिलेगा।
जिस क्वेरी को आप कॉल कर रहे हैं, वह समय समाप्त कर रही है। ऐसा लग सकता है कि सर्वर से कनेक्शन समस्या है, लेकिन, इस बात पर निर्भर करता है कि आपका ऐप कैसे संरचित है, आप इसे उस चरण में ले जा सकते हैं, जहां आपकी क्वेरी टाइमआउट होने से पहले निष्पादित हो रही है।
कनेक्शन लीक। कितनी प्रक्रियाएं चल रही हैं? कितने खुले कनेक्शन? मुझे यकीन नहीं है कि अगर कच्चे ADO.NET कनेक्शन पूलिंग करता है, तो आवश्यक रूप से अलाउ एंटरप्राइज लाइब्रेरी, या जहां सब कॉन्फ़िगर किया गया है, स्वचालित रूप से कनेक्शन बंद कर देता है। यह शायद एक लाल हेरिंग है। डब्ल्यूसीएफ और वेब सेवाओं के साथ काम करते समय, हालांकि, मेरे पास समय-समय पर कनेक्शन नहीं होने और अन्य अप्रत्याशित व्यवहार के कारण समस्याएँ हैं।
कोशिश करने के लिए चीजें:
SQL प्रबंधन स्टूडियो के साथ सर्वर से कनेक्ट होने पर क्या आपको टाइमआउट मिलता है? यदि ऐसा है, तो नेटवर्क कॉन्फिगरेशन समस्या की संभावना है। यदि आपको प्रबंधन स्टूडियो से जुड़ते समय कोई समस्या नहीं दिखती है, तो समस्या आपके ऐप में होगी, सर्वर के साथ नहीं।
SQL Profiler चलाएँ, और देखें कि वास्तव में तार के पार क्या हो रहा है। आपको यह बताने में सक्षम होना चाहिए कि क्या आप वास्तव में कनेक्ट कर रहे हैं, या यदि कोई क्वेरी समस्या है।
प्रबंधन स्टूडियो में अपनी क्वेरी चलाएँ, और देखें कि इसमें कितना समय लगता है।
सौभाग्य!
यदि आप इसे गतिशील रूप से बदलना चाहते हैं, तो मैं SqlConnectionStringBuilder का उपयोग करना पसंद करता हूं ।
यह आपको ConnectionString अर्थात स्ट्रिंग को क्लास ऑब्जेक्ट में परिवर्तित करने की अनुमति देता है, सभी कनेक्शन स्ट्रिंग गुण इसके सदस्य बन जाएंगे।
इस मामले में असली फायदा यह होगा कि आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि क्या कनेक्शन स्ट्रिंग में पहले से ही कनेक्शनटाइमआउट स्ट्रिंग भाग मौजूद है या नहीं?
साथ ही यह एक ऑब्जेक्ट बनाता है और स्ट्रिंग को मैनिपुलेट करने के बजाय ऑब्जेक्ट में वैल्यू असाइन करने के लिए हमेशा अच्छा होता है।
यहाँ कोड नमूना है:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
लिए SqlConnection
टाइप पर संपत्ति बनाना एक अच्छा विचार था।