【问题标题】:reacting to loss of connection对失去连接做出反应
【发布时间】:2023-04-05 19:20:01
【问题描述】:

假设我有一个连接到 WCF 服务或消息队列的 .NET 客户端应用程序。在程序正常执行期间,可能会出现连接丢失或者用户被管理员强制注销,或者管理员向应用发送消息以更改并登录到另一个 WCF 服务器(例如某些手动负载平衡的形式)。

只有当许多低级方法中的任何一个与进行 WCF 调用相关联并且失败时,客户端应用程序才会知道这一点。

当这种事情发生时,我希望应用程序及其所有窗口以某种方式被禁用/隐藏,以便出现对话框/启动窗口并重新连接,一旦成功,窗口就会再次显示。

如何做到这一点?我看到的问题是,首先发现问题的代码处于最低级别(即,可能是由于单击主窗口顶部的对话框窗口的按钮所致)。有点需要程序由内而外才能直观地处理它。因此我假设有一些模式或框架可以帮助解决这个问题?

【问题讨论】:

    标签: c# .net f# real-time


    【解决方案1】:

    不幸的是,没有一种很好的方法可以做到这一点,因为由此引起的异常将在任何可能发生 WCF 调用的地方开始,并向上直到有东西捕获它们。对于 HTTP 绑定,您知道什么时候会发生,因为 WCF 仅在您进行显式调用时才执行任何操作,因此您可以捕获任何断开/超时异常并适当地处理它们。

    对于消息队列或 TCP 绑定,我认为它可能会有点混乱,但策略是一样的。每当您进行 WCF 调用时,您都需要注意适当的异常,然后应用程序将不得不调用一些可以按照您想要的方式更改 UI 的函数。

    【讨论】:

      【解决方案2】:

      我相信您正在寻找的是所谓的“异常处理”。例外是从底部到顶部的方法。

      【讨论】:

      • 不,我所说的是应用程序的某种整体事件循环,当发生此类异常时,我们能够暂停应用程序,进行重新连接,然后恢复应用程序 -无论应用程序中任何地方的深层发现问题的方法是什么。
      • 在世界的某个地方,您需要一个能够重新连接并且可以调用app.Suspend 或其他任何东西的处理程序。我认为没有任何框架或魔法可以提供帮助。
      • 请注意,如果 app 是一个全局变量,则您不必做任何工作来将其连接到处理程序或反转控制。
      【解决方案3】:

      您可以应用的一种可能的解决方案是您可以调用某种非事务性方法,该方法将在固定间隔内返回最小结果。或者如果可以得到实例化的wcf客户端的底层socket对象;检查的开销并不大。尽管套接字对象可能没有某种与断开连接相关的事件;您只能在尝试与另一端通信时进行检查,但我可能对此有误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 2021-02-18
        • 2017-11-08
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多