检查服务器是否可用

我正在寻找一种方法来检查服务器是否仍然可用。 我们有一个离线应用程序,可以在服务器上保存数据,但如果服务器连接断开(偶尔会发生),我们必须将数据保存到本地数据库而不是在线数据库。 所以我们需要继续检查服务器是否仍然可用。

我们在这个应用程序中使用C#

sqlconnection.open的检查sqlconnection.open不是一个选项,因为在抛出错误之前需要大约20秒,我们不能等待这么长时间+我也在使用一些http服务。

只需使用System.Net.NetworkInformation.Ping类。 如果您的服务器没有响应ping(由于某种原因您决定阻止ICMP Echo请求),您将必须为此创建自己的服务。 就个人而言,我完全没有阻止ICMP Echo请求,我认为这是要走的路。 ping命令已经使用了很长时间来检查主机的可达性

 using System.Net.NetworkInformation; var ping = new Ping(); var reply = ping.Send("google.com", 60 * 1000); // 1 minute time out (in ms) // or... reply = ping.Send(new IPAddress(new byte[]{127,0,0,1}), 3000); 

如果连接与你说的一样不可靠,我就不会使用单独的检查,而是将数据保存在exception处理的本地部分 。 我的意思是如果连接失败并抛出exception,您切换策略并在本地保存数据。

如果先检查并且之后连接丢失(当您实际保存数据时),那么您仍然会遇到需要处理的exception。 所以初步检查是不必要的。 如果您可以假设在成功检查后连接已启动并保持正常,则此检查将非常有用。

从您的问题看来,连接到服务器的目的是使用其数据库。 您的首要任务是检查是否可以成功连接到数据库。 如果您可以PING服务器或获得HTTP响应(如其他答案中所建议的那样)并不重要,除非您成功建立与数据库的连接,否则您的进程将失败。 您提到检查数据库连接时间过长,为什么不将应用程序连接字符串中的“ Connection Timeout设置更改为更加不耐烦的值(例如5秒( Connection Timeout=5 ))?

如果这是一个SQL服务器,那么你可以尝试打开一个新的连接。 如果SqlConnection.Open方法失败,则可以检查错误消息以确定服务器是否不可用。

你现在在做的是:

  • 使用远程服务器
  • 如果远程服务器出现故障,请使用本地缓存

如何确定服务器是否可用? 使用catch块。 这是最简单的代码。


如果你实际上有一个本地数据库(而不是,例如,等待插入的事务或数据列表),我会改变设计:

  • 使用本地数据库
  • 定期同步本地数据库和远程数据库

我将让您成为并发约束和其他与您的应用程序相关的东西的判断来选择解决方案。

既然您想要查看数据库服务器是否存在当您尝试连接到数据库或使用套接字并在某些服务上尝试与服务器的原始连接时捕获任何错误,我建议数据库,因为这是资源你需要。