我在WCF中使用net.tcp和Duplex回调进行发布/订阅。我有许多客户订阅该服务,这很好。但是,有时客户端将关闭而不会取消(客户端计算机进入睡眠状态,计算机崩溃,网络连接中止等等),这会导致在通过回调列表回调时抛出异常。
现在,我当然可以捕获异常并删除有问题的回调,但这对我来说似乎不像是一个异常情况,而且更像是“预期行为”。
是否有一个事件在连接关闭时被触发,它将通知我,以便我可以从列表中删除回调?考虑这是net.tcp而不是HTTP,因此应该知道连接状态。
显然,框架知道连接已被关闭和处理,因为异常是“试图调用已处置对象”的行。
编辑:
我应该指出,这不是一个长期运行的交易。它是发布/订阅方案中的长时间连接。基本上,回调用于在瞬态订户发生时通知各种事件。每个事件都是孤立的,不会长时间运行。
答案 0 :(得分:3)
已经有一段时间了,这是来自内存,所以我可能是错的,但我想也许如果你在DispatchRuntime上创建一个IEndpointBehavior来添加一个IInputSessionShutdown,那么你可以在会话通道结束时得到通知