2016-04-24 4 views
0

проверить соединение доступно с кодом:Как сократить время ожидания для открытого соединения?

SqlConnection objConnection = new SqlConnection(string.Concat(connectionString)); 
     try 
     { 
      objConnection.Open(); // this line make wait time if connection not available 
      objConnection.Close(); 
      SqlConnection.ClearAllPools(); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 

Когда соединение не доступно, это занимает много времени, чтобы ответить на .how может уменьшить его?

+0

Если вы подключаетесь по протоколу TCP, вы можете попробовать, если сервер настроен на ответ на простой пинг и использовать это вместо того, чтобы инициировать реальное TCP-соединение. Я предполагаю, что ваш клиент имеет сетевое соединение. – rene

+0

У меня нет доступа к серверу конфигурации. – shahroz

ответ

1

Если вы подключаетесь к вашему SQL Server вы можете попытаться Ping сервер первым. На моем ящике ping занимает всего 5 секунд, чтобы сделать вывод, что сервер недоступен. Самый простой код, который использует эту функцию показано в этом фрагменте:

if(new System.Net.NetworkInformation.Ping().Send("Your servername here").Status != 
     System.Net.NetworkInformation.IPStatus.TimedOut) 
{ 
    // server reachable, try a real SQL Server connection now 
    SqlConnection objConnection = new SqlConnection(connectionstring); 
    try 
    { 
     objConnection.Open(); // this line make wait time if connection not available 
     objConnection.Close(); 
     // not sure why you would want this 
     // only use if you want worse performance 
     // SqlConnection.ClearAllPools(); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 
else 
{ 
    return false; // PING failed 
} 

Системные администраторы могут отключить/блок ICMP трафик так что этот вариант может не работать для каждого сервера.

1

Вы можете проверить SQL-подключение так, это не займет много времени

 SqlConnection objConnection = new SqlConnection(string.Concat(connectionString)); 
     try 
     { 
      objConnection.Open(); 
     } 
     catch {} 

     if (objConnection != null && objConnection.State == ConnectionState.Open) 
     { 
      try 
      { 
       objConnection.Close(); 
      } 
      catch {} 
      return true; 
     } 
     else if (objConnection != null && objConnection.State == ConnectionState.Closed) 
     { 
      try 
      { 
       objConnection.Close(); 
      } 
      catch {} 
      return false; 
     } 
+0

objConnection.State близко, потому что я его не открываю !!! – shahroz

+0

без открытия у вас нет выбора для проверки, и если вы попробуете открыть его и не сработаете, это обязательно займет время, потому что он попытается снова подключиться, а затем сообщит вам, что он не может открыть – Mostafiz

+0

, как можно уменьшить это время (он попытается для повторного подключения)? Является ли это возможным? – shahroz

1

Не стоит ClearAllPools! Пул соединений специально предназначен для более эффективного подключения. Когда вы используете Open(), используется соединение из пула (если оно есть). Когда вы Close(), он возвращается в пул, но не уничтожается, просто ожидая, что кто-то снова его использует.

Смежные вопросы