我正在尝试创建一个使用客户端回调的 WCF 服务。我希望只要有连接(互联网、网络)并且客户端或通道没有明确关闭通道,通道就保持打开状态。
为了保持通道开放(即使没有活动),我找到了 WCF 支持的可靠会话。我发现通过使用可靠会话,需要考虑两个计时器:Binding.ReceiveTimeout
和ReliableSession.InactivityTimeout
.
在网上搜索后,我仍然无法理解这两者到底是如何协同工作的。我知道如果两次超时,连接就会进入故障状态。
我的第一个问题:启用可靠会话时到底会发生什么?
我的第二个问题:Here http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.binding.receivetimeout.aspx,为什么msdn这么说?
由于如果任一不活动计时器触发,连接就会断开,
一旦 InactivityTimeout 大于 ReceiveTimeout,则增加 InactivityTimeout
没有影响。这两个超时的默认值为 10 分钟,
所以你总是必须同时增加它们才能产生影响
使用可靠的会话。
要获得第一个问题的答案,请查看此问题的精彩答案:
WCF可靠会话的目的是什么? https://stackoverflow.com/questions/2911221/what-is-the-purpose-of-wcf-reliable-session
对于我来说,msdn 网站上的解释很清楚:
当达到 ReceiveTimeout 中指定的时间(例如 10 分钟)时,它将结束连接,即使可靠会话已发送保持活动蜂鸣(例如每 1 分钟一次)。
每分钟发送的保持活动蜂鸣将确保永远不会达到 inactivityTimout(例如 5 分钟) - 因此通道将无限期地保持打开状态 - 但在 ReceiveTimeout 中指定的时间之后,会话/通道仍将关闭。
因此,据我了解,ReceiveTimeout 应该始终高于或与 inactivityTimeout 相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)