代码之家  ›  专栏  ›  技术社区  ›  jamesmillerio

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

  •  2
  • jamesmillerio  · 技术社区  · 16 年前

    我在C中创建了一个时钟应用程序,它连接到我们服务器上的一个Web服务,以便给员工打卡。应用程序驻留在系统托盘中,如果用户关闭/挂起机器或闲置超过三个小时,应用程序将向用户发出时钟,在最后一次活动时,应用程序将向用户发出时钟。

    我的问题是,当用户从睡眠状态(触发SystemEvents.PowerModeChanged事件)中恢复机器时,应用程序会尝试让员工重新计时,但此时网络连接未完全初始化,Web服务调用超时。

    一个显而易见的解决方案,尽管是一种黑客行为,但它将延迟上班时间,但这并不一定能解决问题。我要做的是一种“无情”的时钟,在那里它将等待,直到它能够看到服务器,直到它真正尝试时钟。

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

    5 回复  |  直到 15 年前
        1
  •  3
  •   Scott Dorman    16 年前

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

        2
  •  0
  •   Mitchel Sellers    16 年前

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

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

        3
  •  0
  •   Andrei Rînea    16 年前

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

        4
  •  0
  •   Steven A. Lowe    16 年前

    如果问题是重新建立网络服务的延迟, Ping 是解决办法,就像按门铃看看有没有人在家

    如果ping成功,则尝试调用Web服务,并适当捕获异常(我认为socketException和soapException都可能发生,这取决于准备就绪/响应能力)

        5
  •  0
  •   me me    15 年前

    尽管Web服务端口已打开,但仍可以禁用ping。我不会用这种方法…