我已经在C#中创建了一个时钟应用程序,它连接到我们服务器上的web服务,以便为员工打卡上班/下班。应用程序驻留在系统托盘中,如果用户关闭/挂起他们的机器,或者如果他们空闲超过三个小时,它就会在最后一次活动时对他们进行时钟退出。
我的问题是,当用户将他的机器从睡眠状态(触发SystemEvents.PowerModeChanged事件)恢复时,应用程序会尝试给员工打卡,但此时网络连接尚未完全初始化,web服务调用超时。
一个显而易见的解决方案,尽管是一个黑客,将是延迟打卡,但这并不一定能解决所有的问题。我想要做的是一种“无情的”时钟,它会一直等到看到服务器,直到它真正尝试打卡。
确定是否可以建立到web服务的连接的最佳方法是什么?
发布于 2008-09-25 18:19:47
最好的方法是实际尝试建立连接并捕获错误。您可以ping机器,但这只会告诉您机器是否正在运行并且是否在网络上,这并不一定反映tell服务是否正在运行和可用。
发布于 2008-09-25 18:27:58
在处理事件时,将连接代码放入一个方法中,该方法将一直循环到成功,捕获错误并重试。
即使是延迟也不是完美的,因为根据运行的单个系统和其他应用程序,重新建立网络连接可能需要不同的时间。
发布于 2008-09-25 18:28:00
如果问题是重新建立网络服务的延迟,Ping就是解决方案;这就像按门铃查看是否有人在家一样
如果ping成功,那么尝试调用web服务,适当地捕获异常(我认为SocketException和SoapException都可能发生,具体取决于就绪情况/响应速度)
https://stackoverflow.com/questions/134992
复制相似问题