我在 WCF 中有一个使用 net.tcp 和 Duplex 回调的发布/订阅方案。我有许多订阅该服务的客户,这很好用。但是,有时客户端会在没有取消订阅的情况下关闭(客户端计算机进入睡眠状态、计算机崩溃、网络连接被中止等),这会导致当我通过回调列表回调时抛出异常。
现在,我当然可以捕获异常并删除有问题的回调,但这对我来说似乎不太像异常情况,并且更接近“预期行为”。
是否有在连接关闭时触发的事件会通知我,以便我可以从列表中删除回调?考虑到这是 net.tcp 而不是 HTTP,所以应该知道连接状态。
显然,框架知道连接已关闭并被释放,因为异常类似于“尝试调用已释放对象”。
编辑:
我应该指出,这不是一个长期运行的事务。在发布/订阅场景中,这是一个长期运行的连接。基本上,回调用于在各种事件发生时通知瞬态订阅者。每个事件都是孤立的,不会长时间运行。