sql >> Databáze >  >> RDS >> Sqlserver

Jak zrychlit časový limit SqlConnection

Zdá se, že všechny případy, které způsobily dlouhá zpoždění, by se daly hodně vyřešit rychleji pokusem o přímé připojení soketu, jako je tento:

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);
   }
}

Tento kód použiji ke kontrole, zda server odpovídá na portu SQL Server, a pokud ano, pokusím se otevřít připojení. Myslel jsem si (na základě zkušeností ostatních), že i na této úrovni dojde ke zpoždění 30 sekund, ale dostávám zprávu, že počítač na těchto zařízeních okamžitě "aktivně odmítl připojení".

Upravit: A když automat neexistuje, tak mi to hned říká taky. Žádné 30sekundové zpoždění, které jsem nenašel.

Upravit: Strojům, které byly v síti, ale nejsou vypnuté, stále trvá 30 sekund, než selžou. Počítače chráněné firewallem však selhávají rychleji.

Upravit: Zde je aktualizovaný kód. Mám pocit, že je čistší zavřít zásuvku než zrušit vlákno:

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. PostgreSQL - správně změňte ID řádku tabulky

  2. Rychlé a špinavé pro smyčky v okamžitém okně

  3. Linq to Entities :pomocí ToLower() na polích NText

  4. Automatický sběr dat změn databázového schématu na MS SQL Server