相信很多朋友在做WCF双工开发时会遇到这种问题,如果客户端十分钟不与客户端通信,则再次回调客户端时将产生异常,这主要是由于WCF为了防止拒绝式服务攻击,规定默认客户端空闲时间是十分钟,这显然不能满足大家需要,但是当我们设置好receiveTimeout属性时却发现没有起作用,当然有的朋友可能会设置inactivityTimeout此属性,也没有起作用。
我们可以在MSDN找到官方解释:
使用可靠会话时,必须同时满足两个不同的非活动计时器,才能使连接处于活动状态。 如果任一非活动计时器结束计时,则将断开连接。
第一个非活动计时器为可靠会话计时器,称为 InactivityTimeout。 如果在超时期限内没有收到任何应用程序消息或基础结构消息,此非活动计时器将激发。 基础结构消息是指为了通道堆栈中的协议之一(例如,保持活动状态或确认,而并非包含应用程序数据)而生成的消息。
第二个非活动计时器为服务计时器,它使用绑定的 ReceiveTimeout 设置。 如果在超时期限内没有收到任何应用程序消息,此非活动计时器将激发。 例如,它可以指定服务器关闭会话所用的通道前,客户端向服务器发送至少一个消息所需的最长时间。 此行为确保了客户端不能无限期地占用服务器资源。
所以我们必须同时设置这两个属性,例如: