2009-07-21 2 views
1

У меня есть приложение winform, которое должно быть в курсе, когда SQL-сервер доступен, чтобы разрешить функциональность Merge Syncing. Я пробовал варианты ниже, которые работают один раз, но я хотел бы придумать что-то более динамичное.Мониторинг состояния сети в режиме реального времени. Какие события поднимаются?

Подходящий функционал (спасибо Alex_L) проверяет порт 1433, на котором работает SQL, и работает отлично. То, что я пытаюсь выполнить, - это способ отслеживать это в режиме реального времени. Должен ли я создать службу Windows? Как насчет каких-либо других сетевых событий, таких как изменение сетевого соединения?

Использование этого связанного приложения просто. Если они находятся в нашей сети, то доступна часть репликации слияния. Если они не в нашей сети, то это не так. SQL Server никогда не должен быть доступен для нашей сети, и он ДОЛЖЕН всегда быть доступен, когда включен.

Это, как говорится, я буду открыт для решений, связанных с обнаружением нашей текущей сети вместо экземпляра SQL.

 private static bool IsSqlAvailable() 
     { 
      TcpClient tcpc = new TcpClient(); 
      try 
       { 
       tcpc.Connect("10.250.50.30", 1433); 
       return true; 
       } 
      catch 
       { 
       return false; 
       } 
     } 

ответ

2

Вы можете проверить порт 1433 на SQL Server (или другой, если используется):

TcpClient tcpc = new TcpClient(); 
try 
{ 
    tcpc.Connect("10.250.50.30", 1433); 
    return true; 
} 
catch 
{ 
    return false; 
} 
+0

Спасибо, я этого не знал. Нет никакого способа контролировать это в режиме реального времени? Мне нужно будет периодически проверять это вручную, чтобы «имитировать» реальное время? –

+0

Как я думаю, самый простой способ (и, как я делаю в моих проектах) - написать службу Windows. Эта небольшая служба проверяет наличие SQL-серверов (используя класс Timer) и отправляет сообщения соответствующим администраторам. –

1

Я бы, вероятно, пошел со вторым методом, добавив в проверки различные свойства базы данных, чтобы убедиться, что безопасно писать.

http://msdn.microsoft.com/en-us/library/ms176049.aspx

Ok Plan B в ответ на комментарий ниже: Попросите SQL сервер отправить своего рода «Heartbeat» для вашего основного приложения (Ping или что-то, до вас). У вас может быть приложение для отдельного потока, чтобы наблюдать за этим пульсом каждые X секунд. Если вы прекратите получать это сердцебиение, то вы не подключены к вашему серверу для запуска слияния.

+0

Как использовать это для реализации динамической проверки? Это то, что я пытаюсь задать в моем вопросе (может быть, плохо). Я хочу, чтобы программа узнала, когда соединение доступно или нет во время работы не только при запуске. –

+0

Спасибо за ответы. Является ли это жизнеспособным вариантом с 200 отключенными пользователями? Имеете ли наш производственный сервер pinging 200 пользователей? Кроме того, мы используем динамический DNS, поэтому IP-адрес меняется все время, хотя я полагаю, что вы можете выполнить ping с помощью HOSTNAME. Я просто не могу поверить, что локальная система не может контролировать соединение? Даже если это просто посмотреть, находятся ли они в настоящее время в нашей сети. Я бы подумал, должно быть событие, возникшее при изменении состояния соединения. –

+0

Насколько я знаю, что все внутренние проверки, чтобы проверить, хорошо ли соединение, - это проверить его и проверить, что произойдет. После этого могут быть подняты любые события. Кроме того, я не говорю, что ваш производственный сервер должен сделать 200 отдельных писем для каждой клиентской машины. Я думаю, что ваш сервер должен сделать одну трансляцию на произвольном порту (например, 54321). Создайте рабочий поток, чтобы подключиться к вашему серверу на порту 54321. Затем каждый подключенный клиент увидит его одним выстрелом. –

2

У меня есть запись в моем блоге, показывая how to detect network availability changes. Он использует API окон NotifyAddrChange, чтобы поднять управляемое событие всякий раз, когда в таблице сопоставления адресов IP-адресов происходит изменение. Поскольку такие изменения связаны с изменениями в доступности сети (подключение к кабелю, подключение WiFi, подключение VPN, dial-up, 3G-dial и т. Д.), Вы можете использовать это событие для проверки доступности сервера и начала синхронизации.

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