我有一个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;
}
}
答案 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秒观察一次心跳。如果您停止接收该心跳,则表示您未连接到服务器以运行合并。