2010-05-04 10 views
5

फिलहाल मैं अगर डेटाबेस पहुँचा जा सकता है की जांच करने के लिए इस कोड का उपयोग कर रहा: इस कोड को ठीक काम करता हैADO.NET: यह जांचने का तेज़ तरीका डेटाबेस सर्वर पहुंच योग्य है या नहीं?

public bool IsDatabaseOnline(string con) 
{ 
    bool isConnected = false; 
    SQLConnection connect = null; 

    try { 
     connect = new SQLConnection(con); 
     connect.Open(); 
     isConnected = true; 

    } catch (Exception e) { 
     isConnected = false; 

    } finally { 
     if (connect != null) 
      connect.Close(); 
    } 

    return isConnected; 
} 

, वहाँ एक नुकसान है। यदि सर्वर ऑनलाइन नहीं है तो यह निर्णय लेने से पहले कनेक्शन खोलने की कोशिश कर रहे लगभग 4 पूर्ण सेकंड खर्च करता है कि यह उपलब्ध नहीं है।

क्या वास्तव में इसे खोलने और टाइमआउट की प्रतीक्षा किए बिना कनेक्शन का परीक्षण करने का कोई तरीका है? डेटाबेस के समान कुछ पिंग के बराबर है?

+0

आप अपने सर्वर एक लंबे समय के नीचे होने की उम्मीद करते हैं? –

+0

आपको इसे 'कैच (एसक्लएक्सप्शन)' – SLaks

उत्तर

3

आप केवल कनेक्शन समय समाप्ति को छोटा करने के लिए बदल सकते हैं। कुछ परीक्षण करें और देखें कि आप कितनी कम जा सकते हैं और फिर भी विश्वसनीय हो सकते हैं। मुझे यकीन है कि आप करीब 500 एमएमएस प्राप्त कर सकते हैं।

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

+2

में बदलना चाहिए यदि आप कनेक्शन कनेक्शन टाइम सेकंड में 500 मिलीसेकंड निर्दिष्ट करना चाहते हैं? –

-1

हां और नहीं।

आप हमेशा यह नोट कर सकते हैं कि आपका सर्वर किस पोर्ट पर सुनता है, और उसके बाद सीधे सॉकेट के साथ कनेक्ट करें और कनेक्ट करें। फिर यदि आप सफल होते हैं, तो आप इसे ऑनलाइन मान सकते हैं, लेकिन यह आपके नेटवर्क वातावरण के आधार पर नहीं हो सकता है। हालांकि यह दृष्टिकोण की तरह सबसे अधिक "पिंग" है। बेशक, यह कुछ और सुन रहा है, लेकिन यह संभवतः एक मानक वातावरण में असंभव है जहां डीबी अस्थायी रूप से नीचे है।

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

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

2

मेरे विधि (सफल जोड़ने के बाद) एक का चयन करें जो टेबल पर निर्भर करता है नहीं करता है, उदाहरण के समय के लिए बनाने के लिए है। एमएस एसक्यूएल सर्वर में:

"Sysdatetime चयन()"

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

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