Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SqlConnection टाइमआउट को और अधिक तेज़ी से कैसे करें

ऐसा लगता है कि लंबे समय से देरी करने वाले सभी मामलों का समाधान काफी किया जा सकता है इस तरह सीधे सॉकेट कनेक्शन का प्रयास करके अधिक तेज़ी से:

foreach (string svrName in args)
{
   try
   {
      System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient(svrName, 1433);
      if (tcp.Connected)
         Console.WriteLine("Opened connection to {0}", svrName);
      else
         Console.WriteLine("{0} not connected", svrName);
      tcp.Close();
   }
   catch (Exception ex)
   {
      Console.WriteLine("Error connecting to {0}: {1}", svrName, ex.Message);
   }
}

मैं इस कोड का उपयोग यह जांचने के लिए करने जा रहा हूं कि सर्वर SQL सर्वर पोर्ट पर प्रतिक्रिया करता है या नहीं, और यदि ऐसा होता है तो केवल कनेक्शन खोलने का प्रयास करें। मैंने सोचा (दूसरों के अनुभव के आधार पर) कि इस स्तर पर भी 30 सेकंड की देरी होगी, लेकिन मुझे एक संदेश मिलता है कि मशीन ने तुरंत इन पर "कनेक्शन को सक्रिय रूप से मना कर दिया"।

संपादित करें: और अगर मशीन मौजूद नहीं है, तो वह मुझे वह भी तुरंत बता देती है। कोई 30-सेकंड की देरी नहीं जो मुझे मिल सकती है।

संपादित करें: ऐसी मशीनें जो नेटवर्क पर थीं लेकिन बंद नहीं हुईं, मुझे लगता है कि विफल होने में अभी भी 30 सेकंड लगते हैं। हालांकि, फायरवॉल मशीनें तेजी से विफल हो जाती हैं।

संपादित करें: यहाँ अद्यतन कोड है। मुझे लगता है कि थ्रेड को निरस्त करने की तुलना में सॉकेट को बंद करना अधिक स्वच्छ है:

static void TestConn(string server)
{
   try
   {
      using (System.Net.Sockets.TcpClient tcpSocket = new System.Net.Sockets.TcpClient())
      {
         IAsyncResult async = tcpSocket.BeginConnect(server, 1433, ConnectCallback, null);
         DateTime startTime = DateTime.Now;
         do
         {
            System.Threading.Thread.Sleep(500);
            if (async.IsCompleted) break;
         } while (DateTime.Now.Subtract(startTime).TotalSeconds < 5);
         if (async.IsCompleted)
         {
            tcpSocket.EndConnect(async);
            Console.WriteLine("Connection succeeded");
         }
         tcpSocket.Close();
         if (!async.IsCompleted)
         {
            Console.WriteLine("Server did not respond");
            return;
         }
      }
   }
   catch(System.Net.Sockets.SocketException ex)
   {
      Console.WriteLine(ex.Message);
   }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पूर्णांक को हेक्स और हेक्स को पूर्णांक में बदलें

  2. MS SQL सर्वर में 24/7 IS डेटाबेस का शेड्यूल्ड रखरखाव

  3. बीसीपी उपयोगिता और एसक्यूएल सर्वर 2008 का उपयोग करके कॉलम हेडर (कॉलम नाम) के साथ फाइल करने के लिए निर्यात तालिका

  4. क्रॉस जॉइन 'एन' बार एक टेबल

  5. SQL सर्वर 2008:डेटा प्रकार nvarchar को फ्लोट में बदलने में त्रुटि