网络状态的实时监控。发生了什么事?

时间:2009-07-21 13:30:20

标签: c# sql-server winforms monitoring detection

我有一个winform应用程序需要注意SQL服务器何时可用,以便允许合并同步功能。我尝试了下面的变体,它们一次性工作,但我想提出一些更有活力的东西。

以下功能(谢谢Alex_L)正在检查SQL运行的1433端口并且运行良好。我想要实现的是一种在实时中监控它的方法。我是否必须创建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;
               }
        }

3 个答案:

答案 0 :(得分:2)

您可以检查SQL Server的端口1433(或其他,如果使用的话):

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

答案 1 :(得分:2)

我的博客上有一条显示how to detect network availability changes的条目。只要IP接口地址映射表发生更改,它就会使用NotifyAddrChange Windows API来引发托管事件。由于此类更改与网络可用性更改(电缆插件,WiFi连接,VPN连接,拨号,3G拨号等)相关联,因此您可以使用该事件测试服务器可用性并开始同步。

答案 2 :(得分:1)

我可能会使用第二种方法,添加检查各种数据库属性以确保写入是安全的。

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

确定B计划以回应以下评论: 让您的SQL服务器向您的主应用程序发送某种“心跳”(Ping或其他任何内容;由您决定)。您可以让您的应用运行一个单独的线程,每隔X秒观察一次心跳。如果您停止接收该心跳,则表示您未连接到服务器以运行合并。