我现在遇到了一些恼人的问题。 我有一个Silverlight 4应用程序(默认情况下运行OOB)。它使用WCF和net.tcp作为与服务器通信的方式。 客户端使用wcf客户端代理的中央实例。只要一切都在服务器端运行,一切都很好。
如果我在所有事情中间杀死服务器,我会在客户端遇到大量异常(连接丢失,通道出现故障等)。
现在我正在寻找一种以干净和集中的方式处理这个问题的方法(如果可以集中化的话)。
SL应用程序有一个位于App.cs中的中央客户端对象(公共静态MyClient Client {get; set;}),它在应用程序启动时初始化。
知道如何正确处理客户端对象上的任何连接问题吗?
答案 0 :(得分:2)
您提到您正在使用WCF客户端代理的中央实例。
如果是这种情况,那么当发生服务器错误时,代理将进入故障状态。为了保持集中,您可以将客户端代理强制转换为ICommuicationObject
并将事件处理程序附加到Faulted
事件,该事件将在事件触发时使用新代理替换故障代理。
有关集中访问资源的线程安全的常见警告适用!
答案 1 :(得分:1)
我认为我找到了一个可行的 - 虽然不是集中式 - 解决方案。而不是使用try / catch块来混淆代码,它似乎需要对event.Error属性进行空检查。如果连接发生了某些事情,则此属性始终不为null。如果您尝试访问event.Result,则只会引发异常。
它可能不是最美丽的解决方案,但它似乎到目前为止有效。
也许有一种更优雅的方式......