对失去连接做出反应

时间:2011-02-04 01:26:22

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

对于消息队列或TCP绑定,我认为它可能会有点麻烦,但策略是一样的。无论何时进行WCF调用,您都需要注意相应的异常,然后应用程序必须调用一些可以根据需要更改UI的函数。

答案 1 :(得分:2)

我相信你所寻找的东西被称为“异常处理”。例外是从底部到顶部的方式。

答案 2 :(得分:0)

您可以应用的一种可能的解决方案是,您可以调用某种非事务性方法,该方法将在固定间隔内返回最小结果。或者,如果您可以获取实例化的wcf客户端的底层套接字对象;检查的开销并不是那么大。虽然套接字对象可能没有某种与断开相关的事件;你可以检查一下,如果你试图与另一端进行沟通,但我可能会对此不以为然。

相关问题