Мониторинг состояния сети в реальном времени. Какие события поднимаются? - PullRequest
1 голос
/ 21 июля 2009

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 21 июля 2009

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

TcpClient tcpc = new TcpClient();
try
{
    tcpc.Connect("10.250.50.30", 1433);
    return true;
}
catch
{
    return false;
}
2 голосов
/ 22 июля 2009

У меня есть запись в моем блоге, показывающая , как обнаруживать изменения доступности сети . Он использует Windows API NotifyAddrChange , чтобы инициировать управляемое событие всякий раз, когда происходит изменение в таблице сопоставления адресов IP-интерфейса. Поскольку такие изменения связаны с изменениями доступности сети (подключение к сети, подключение по Wi-Fi, подключение по VPN, подключение по телефонной линии, подключение по 3G и т. Д.), Вы можете использовать это событие для проверки доступности сервера и запуска синхронизации.

1 голос
/ 21 июля 2009

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

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

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

...