WCF net.tcp服务器断开连接 - 如何在客户端正确处理?
问题描述:
我现在陷入了一个恼人的问题。 我有一个Silverlight 4应用程序(默认运行OOB)。它使用WCF和net.tcp作为与服务器通信的手段。 客户端使用wcf客户端代理的中央实例。只要一切都在服务器端运行,一切都很好。WCF net.tcp服务器断开连接 - 如何在客户端正确处理?
如果我在一切中间杀死了服务器,我淹死在客户端的异常雪崩(连接丢失,通道故障等)。
现在我正在寻找一种方式来处理干净和集中的方式(如果集中是可能的话)。
SL应用程序有一个位于App.cs(公共静态MyClient Client {get; set;})中的中央客户端对象,它在应用程序启动时被初始化。
任何想法如何正确处理客户端对象上的任何连接问题?
答
我想我找到了一个可行的 - 虽然不是集中式的解决方案。与try/catch块混淆代码,似乎需要对event.Error属性进行空值检查。如果连接发生了什么,这个属性总是不为空。只有在尝试访问event.Result时才会引发异常。
它可能不是最美丽的解决方案,但它似乎工作到目前为止。
也许有虽然是更优雅的方式......
答
你提到你使用WCF客户端代理的中央实例。
如果是这种情况,那么当发生服务器错误时,代理将进入Faulted状态。为了保持集中,您可以将客户端代理强制转换为ICommuicationObject
,并将事件处理程序附加到代替故障代理的Faulted
事件中,并在事件触发时使用新代理。
关于集中访问资源的线程安全常见警告适用!
其实,我刚刚发现这个博客文章是这样做的:http://nahidulkibria.blogspot.com/2008/05/knowing-when-wcf-service-in-fault-state.html – 2010-06-16 13:20:07