1

我有一个启用了会话的双工 WCF 服务,并且我正在尝试避免客户端上出现故障状态异常。

我发现了围绕这个主题的几个讨论,但我发现的所有内容都建议重新创建客户端代理或通道。Non 专注于启用会话的双工服务。

我对这种方法的问题是服务器中的每个客户端都有一个会话,并且每个客户端只有一个服务代理实例(单例服务代理)。因为它是双工的,所以在客户端有几个对象正在监听该服务实例上的事件(从服务器发送到客户端的消息)。如果服务处于故障状态,则不能再使用。如果我丢弃该实例并创建一个新实例,我会发现很难将所有事件处理程序再次连接到这个新实例。

我是否应该包装服务并且每次对象连接到事件时,将处理程序存储在列表中(以便在重新创建服务时重新连接它)?好像丢了代码,容易泄露内存……

有没有办法只重新启动客户端代理/通道,而不丢弃所有代理实例?(我正在使用 VS 生成的代理)

有任何想法吗?

谢谢,MAB

4

1 回答 1

3

您无法重新启动代理。从故障状态中恢复的唯一方法是中止当前实例并重新创建新实例。在客户端,您必须正确取消注册依赖于您的代理实例的所有内容,创建新实例并再次注册所有内容。一旦您获得有关通道处于故障状态的异常(=当您尝试调用服务时),整个操作必须发生。娱乐后,您必须再次致电该服务。

在服务端,实例要么已经死亡(导致通道出现故障状态),要么在会话超时后死亡。当您尝试通过从已知客户端删除通道并取消注册依赖于该通道的任何内容来尝试在故障通道上回调时,您还必须处理故障异常。

于 2011-08-10T08:44:00.073 回答