1

我在 WCF 中有一个使用 net.tcp 和 Duplex 回调的发布/订阅方案。我有许多订阅该服务的客户,这很好用。但是,有时客户端会在没有取消订阅的情况下关闭(客户端计算机进入睡眠状态、计算机崩溃、网络连接被中止等),这会导致当我通过回调列表回调时抛出异常。

现在,我当然可以捕获异常并删除有问题的回调,但这对我来说似乎不太像异常情况,并且更接近“预期行为”。

是否有在连接关闭时触发的事件会通知我,以便我可以从列表中删除回调?考虑到这是 net.tcp 而不是 HTTP,所以应该知道连接状态。

显然,框架知道连接已关闭并被释放,因为异常类似于“尝试调用已释放对象”。

编辑:

我应该指出,这不是一个长期运行的事务。在发布/订阅场景中,这是一个长期运行的连接。基本上,回调用于在各种事件发生时通知瞬态订阅者。每个事件都是孤立的,不会长时间运行。

4

1 回答 1

3

已经有一段时间了,这是记忆中的,所以我可能是错的,但我想也许如果你创建一个 IEndpointBehavior,它会在 DispatchRuntime 上插入一个 IInputSessionShutdown,那么你可以在会话通道结束时收到通知。

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.dispatchruntime.inputsessionshutdownhandlers.aspx

于 2009-08-24T04:15:25.853 回答