检查服务器是否可以在.NET中访问的最佳方法?

时间:2008-09-25 18:15:37

标签: c# .net web-services

我在C#中创建了一个时钟应用程序,它连接到我们服务器上的Web服务,以便为员工提供进/出时钟。该应用程序驻留在系统托盘中,如果用户关闭/挂起他们的计算机,或者他们在上次活动时闲置超过三个小时,那么就会将用户计时。

我的问题出现了,当用户将他的机器从睡眠状态(触发SystemEvents.PowerModeChanged事件)恢复时,应用程序会尝试重新启动员工,但当时网络连接尚未完全初始化并且Web服务调用超时。

一个明显的解决方案,虽然它是一个黑客,但是会延迟时钟,但这不一定能解决所有问题。我期待做的是一种“无情”的时钟,它会等到它能够看到服务器,直到它真正尝试进入。

确定是否可以建立与Web服务的连接的最佳方法是什么?

5 个答案:

答案 0 :(得分:3)

最好的方法是实际尝试建立连接并捕获错误。您可以对计算机执行ping操作,但这只会告诉您计算机是否正在运行且是否在网络上,这不一定反映Web服务是否正在运行且可用。

答案 1 :(得分:0)

处理事件时,将连接代码放入一个循环直到成功,捕获错误并重试的方法中。

即使延迟也不完美,因为取决于各个系统,运行它的其他应用程序可能需要不同的时间才能重新建立网络连接。

答案 2 :(得分:0)

如果问题是重新建立网络服务的延迟,Ping是解决方案;这就像敲响门铃,看看是否有人回家

如果ping成功,则尝试调用Web服务,适当地捕获异常(我认为SocketException和SoapException都可能发生,具体取决于准备情况/响应能力)

答案 3 :(得分:0)

实现发布消息的队列,让线程定期尝试将内存中的队列刷新到Web服务。

答案 4 :(得分:0)

虽然Web服务端口已打开,但可以禁用Ping。我不会用这种方法...