Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对失去连接作出反应_C#_.net_F#_Real Time - Fatal编程技术网

C# 对失去连接作出反应

C# 对失去连接作出反应,c#,.net,f#,real-time,C#,.net,F#,Real Time,假设我有一个连接到WCF服务的.NET客户端应用程序,或者一个消息队列。在程序的正常执行过程中,可能会出现连接丢失,或者用户被管理员强制注销,或者管理员向应用程序发送消息以更改并登录到另一个WCF服务器(例如,某种形式的手动负载平衡) 只有当许多低级方法中的任何一个绑定到WCF调用并失败时,客户端应用程序才会知道这一点 当这种情况发生时,我希望应用程序及其所有窗口以某种方式被禁用/隐藏,以便出现一个对话框/启动窗口并进行重新连接,一旦成功,窗口将再次显示 一个人如何着手做这件事?我看到的问题是,

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

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

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


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

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

可能应用的解决方案之一是调用某种非事务性方法,该方法将在固定的时间间隔内返回最小的结果。或者,如果您可以获取实例化的wcf客户端的底层套接字对象;检查的开销并没有那么大。虽然套接字对象可能没有与断开连接相关的事件;只有当您尝试与另一端通信时,您才可以检查,但我可能错了。

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


对于消息队列或TCP绑定,我认为可能会有点混乱,但策略是一样的。无论何时进行WCF调用,您都需要注意是否存在适当的异常,然后应用程序将必须调用一些可以改变您想要的UI方式的函数。

不,我所说的是应用程序的某种整体事件循环,当发生此类异常时,我们可以挂起应用程序,重新连接,然后恢复应用程序-无论应用程序中的哪个方法发现了问题。在世界的某个地方,您需要一个能够重新连接并可以调用
app.Suspend
或其他功能的处理程序。我认为没有任何框架或魔法可以帮助你。请注意,如果
app
是一个全局变量,那么你不必做任何工作来将它垂直于处理程序或反转控件。