如果WCF Duplex会话过早关闭,如何通知

时间:2009-08-24 03:52:56

标签: wcf callback duplex

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

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

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

显然,框架知道连接已被关闭和处理,因为异常是“试图调用已处置对象”的行。

编辑:

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

1 个答案:

答案 0 :(得分:3)

已经有一段时间了,这是来自内存,所以我可能是错的,但我想也许如果你在DispatchRuntime上创建一个IEndpointBehavior来添加一个IInputSessionShutdown,那么你可以在会话通道结束时得到通知

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