0

我现在陷入了一个恼人的问题。 我有一个Silverlight 4应用程序(默认运行OOB)。它使用WCF和net.tcp作为与服务器通信的手段。 客户端使用wcf客户端代理的中央实例。只要一切都在服务器端运行,一切都很好。WCF net.tcp服务器断开连接 - 如何在客户端正确处理?

如果我在一切中间杀死了服务器,我淹死在客户端的异常雪崩(连接丢失,通道故障等)。

现在我正在寻找一种方式来处理干净和集中的方式(如果集中是可能的话)。

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

任何想法如何正确处理客户端对象上的任何连接问题?

回答

1

我想我找到了一个可行的 - 虽然不是集中式的解决方案。与try/catch块混淆代码,似乎需要对event.Error属性进行空值检查。如果连接发生了什么,这个属性总是不为空。只有在尝试访问event.Result时才会引发异常。

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

也许有虽然是更优雅的方式......

2

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

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

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

+1

其实,我刚刚发现这个博客文章是这样做的:http://nahidulkibria.blogspot.com/2008/05/knowing-when-wcf-service-in-fault-state.html – 2010-06-16 13:20:07

相关问题