我正在寻找一种检查服务器是否仍然可用的方法。 我们有一个离线应用程序,可以在服务器上保存数据,但如果服务器连接断开(偶尔会发生),我们必须将数据保存到本地数据库而不是在线数据库。 所以我们需要继续检查服务器是否仍然可用。
我们正在为此应用程序使用C#
对sqlconnection.open
的检查实际上并不是一个选项,因为在抛出错误之前需要大约20秒,我们不能等待这么长时间+我也在使用一些http服务。
答案 0 :(得分:25)
只需使用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);
答案 1 :(得分:3)
如果连接与您说的一样不可靠,我不会使用单独的检查,但会将数据保存在异常处理的本地部分。 我的意思是如果连接失败并抛出异常,您切换策略并在本地保存数据。
如果先检查并且之后连接丢失(当您实际保存数据时),那么您仍然会遇到需要处理的异常。所以初步检查是不必要的。只有在您成功检查连接已启动并保持运行状态后,检查才有用。
答案 2 :(得分:2)
从您的问题看来,连接到服务器的目的是使用其数据库。您的首要任务是检查是否可以成功连接到数据库。如果您PING
服务器或获得HTTP
响应(如其他答案中所述),则无关紧要,除非您成功建立与数据库的连接,否则您的流程将失败。您提到检查数据库连接时间过长,为什么不将应用程序连接字符串中的Connection Timeout
设置更改为更不耐烦的值,例如5秒(Connection Timeout=5
)?
答案 3 :(得分:1)
如果这是一个sql server,那么你可以尝试打开一个新的连接。如果SqlConnection.Open方法失败,那么您可以检查错误消息以确定服务器是否不可用。
答案 4 :(得分:1)
您现在正在做的是:
如何确定服务器是否可用?使用catch块。这是最简单的编码。
如果你实际上有一个本地数据库(例如,没有等待插入的事务或数据列表),我会改变设计:
我会让你成为并发约束和与你的应用程序相关的其他东西的判断来选择解决方案。
答案 5 :(得分:0)
由于您想要查看数据库服务器是否存在当您尝试连接到数据库或使用套接字并在某些服务上尝试与服务器的原始连接时捕获任何错误,我建议将数据库作为是你需要的资源。