WCF net.tcp服务器断开连接 - 如何在客户端正确处理?

时间:2010-06-15 22:26:02

标签: error-handling silverlight-4.0 wcf-client nettcpbinding disconnect

我现在遇到了一些恼人的问题。 我有一个Silverlight 4应用程序(默认情况下运行OOB)。它使用WCF和net.tcp作为与服务器通信的方式。 客户端使用wcf客户端代理的中央实例。只要一切都在服务器端运行,一切都很好。

如果我在所有事情中间杀死服务器,我会在客户端遇到大量异常(连接丢失,通道出现故障等)。

现在我正在寻找一种以干净和集中的方式处理这个问题的方法(如果可以集中化的话)。

SL应用程序有一个位于App.cs中的中央客户端对象(公共静态MyClient Client {get; set;}),它在应用程序启动时初始化。

知道如何正确处理客户端对象上的任何连接问题吗?

2 个答案:

答案 0 :(得分:2)

您提到您正在使用WCF客户端代理的中央实例。

如果是这种情况,那么当发生服务器错误时,代理将进入故障状态。为了保持集中,您可以将客户端代理强制转换为ICommuicationObject并将事件处理程序附加到Faulted事件,该事件将在事件触发时使用新代理替换故障代理。

有关集中访问资源的线程安全的常见警告适用!

答案 1 :(得分:1)

我认为我找到了一个可行的 - 虽然不是集中式 - 解决方案。而不是使用try / catch块来混淆代码,它似乎需要对event.Error属性进行空检查。如果连接发生了某些事情,则此属性始终不为null。如果您尝试访问event.Result,则只会引发异常。

它可能不是最美丽的解决方案,但它似乎到目前为止有效。

也许有一种更优雅的方式......