【问题标题】:Best way to check if server is reachable in .NET?检查.NET中是否可以访问服务器的最佳方法?
【发布时间】:2008-09-25 18:15:37
【问题描述】:

我在 C# 中创建了一个时钟应用程序,该应用程序连接到我们服务器上的 Web 服务,以便为员工上班/下班打卡。该应用程序驻留在系统托盘中,如果用户关闭/暂停他们的机器,或者如果他们空闲超过三个小时,它会在最后一次活动时将他们打卡。

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

一个明显的解决方案,尽管它是一个 hack,将延迟时钟,但这并不一定能全面解决问题。我想做的是一种“无情”的时钟,它会一直等到它可以看到服务器,直到它真正尝试打卡。

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

【问题讨论】:

    标签: c# .net web-services


    【解决方案1】:

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

    【讨论】:

    • 一个 ping 甚至不一定能告诉你那么多。
    • 是的。如果服务器正常不响应 ping 请求,那就没用了。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2015-11-15
            • 2011-08-22
            • 2013-05-27
            • 1970-01-01
            • 2011-01-11
            • 1970-01-01
            • 2018-09-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多