处理双工绑定WCF应用程序中的已删除客户端

Per*_* P. 14 .net wcf duplex publish-subscribe

我们在WCF应用程序中使用了pub-sub模型,该模型几乎遵循Microsoft示例:设计模式:基于列表的发布 - 订阅.

虽然该服务提供了一个概念,subscribe()并且unsubscribe()在客户端死亡或通道出现故障时处理清理的最佳实践是什么?目前,当客户端订阅时,我将处理程序附加到当前InstanceContext的事件ClosedFaulted事件(服务用户的PerSession实例上下文模式和netTcpBinding):

_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
Run Code Online (Sandbox Code Playgroud)

然而,OnClientLost处理程序只是取消订阅客户端:

  1. 以上是一个好的做法,并且足够强大,能够在客户端断开双工通信时捕获所有情况吗?或者服务是否应该只处理在尝试与客户端通信并处理清理时遇到的异常?
  2. 除了取消订阅客户端回调处理程序之外,是否应该执行任何进一步的清理,特别是在出现故障的情况下?

这个问题提出了类似的问题,但最终没有提供客户呼叫订阅和/或取消订阅之外的案例的答案

谢谢

Chr*_*ham 8

我做了一些测试,我将处理程序附加到回调通道的Closed和Faulted事件,然后在服务器调用回调之前就杀死了客户端.在每次试验中,Closed/Faulted事件在服务器尝试调用回调之前立即触发.尽管如此,我仍然将回调调用包装在try-catch块中,因为客户端通道的破坏可能发生在另一个线程进入回调时.

唯一需要清理的是删除对回调通道的引用.WCF和垃圾收集器完成剩下的工作.