我们在 WCF 应用程序中使用了一个发布-订阅模型,该模型几乎遵循 Microsoft 示例:设计模式:基于列表的发布-订阅。
虽然服务提供了subscribe()
和的概念,unsubscribe()
但在客户端死亡或通道故障的情况下处理清理的最佳实践是什么?目前,当客户端订阅时,我将处理程序附加到当前InstanceContext
的Closed
和Faulted
事件(服务用户使用 PerSession 实例上下文模式和 netTcpBinding):
_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
OnClientLost
处理程序只是取消订阅客户端,但是:
- 上面的做法是否是一个好的做法,并且足够强大,可以在客户端断开双工通信时捕获所有情况?或者服务是否应该只处理在尝试与客户端通信并处理清理时遇到的异常?
- 除了取消订阅客户端回调处理程序之外,是否应该执行任何进一步的清理,尤其是在出现故障的情况下?
这个问题提出了一个类似的问题,但最终没有提供对客户端调用订阅和/或取消订阅之外的案例的答案
谢谢