1

我有一个 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;
               }
        }
4

3 回答 3

2

您可以检查 SQL Server 的端口 1433(或另一个,如果使用):

TcpClient tcpc = new TcpClient();
try
{
    tcpc.Connect("10.250.50.30", 1433);
    return true;
}
catch
{
    return false;
}
于 2009-07-21T14:39:48.733 回答
2

我的博客上有一篇文章展示了如何检测网络可用性变化。只要 IP 接口地址映射表发生更改,它就会使用NotifyAddrChange windows API 引发托管事件。由于此类更改与网络可用性更改(电缆插入、WiFi 连接、VPN 连接、拨号、3G 拨号等)相关联,因此您可以使用该事件来测试服务器可用性并开始同步。

于 2009-07-22T02:21:50.920 回答
1

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

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

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

于 2009-07-21T13:51:54.187 回答