日志含义WCF可靠会话故障

本文关键字:会话 故障 WCF 日志 | 更新日期: 2023-09-27 18:06:41

我有一个托管在Windows服务中的WCF服务,它向任何订阅的监视器应用程序发布错误。有2个服务器应用程序将错误发布到服务,然后将这些错误发送到任何订阅的监视器应用程序。这是使用WSDualHttpBinding完成的。

这个工作,但在一段时间不活动后,它停止工作,并提出一个错误,指出可靠的会话是错误的。我读了几篇关于这个问题的文章,但没有找到答案。我已经放入了所有必要的异常处理,但这没有帮助。

系统不是发布我的代码,而是基于MSDN中基于列表的发布订阅示例,只是增加了错误检查和异常处理。下面的链接。

http://msdn.microsoft.com/en-us/library/ms752254.aspx

有人知道是什么原因造成的吗?

日志含义WCF可靠会话故障

你是对的,你需要增加你的非活动超时时间。但是,当您使用可靠会话时,也要考虑receiveTimeout。来自这篇MSDN文章:

当使用可靠会话时,有两种不同的不活动状态必须满足以保持连接活动的计时器。如果任何一如果这些非活动计时器关闭,则连接将被丢弃。

第一个非活动计时器位于可靠会话上并被调用InactivityTimeout。如果没有消息,则触发此非活动计时器。无论是应用程序还是基础结构,都将在超时内接收时期。基础结构消息是为以下目的生成的消息通道栈中某个协议的目的,例如aKeep alive or一个致谢,而不是包含应用数据。

第二个非活动计时器在服务上,并使用绑定的ReceiveTimeout设置。这个非活动计时器触发if在超时时间内没有收到任何应用程序消息。这例如,指定客户端发送所需的最长时间在服务器关闭之前至少向服务器发送一条消息会话使用的通道。这种行为确保了客户端不能在任意长的时间内保持服务器资源。

如果非活动计时器触发,连接将被断开,当InactivityTimeout大于ReceiveTimeout时,增加InactivityTimeout没有效果。这两个超时的默认值都是10分钟,所以你总是需要增加这两个值来产生差异使用可靠会话

将这两个值都设置为"Infinite"(如果你使用配置文件)或TimeSpan.MaxValue,如果你在代码中设置绑定,应该会达到你想要的效果。

编辑1 将receiveTimeout和inactivityTimeout的值设置为"infinite"将在编译器中生成一个警告。这没关系。IDE使用不考虑该关键字的XSL。在幕后,WCF使用TimeSpanOrInfiniteConverter将关键字转换为TimeSpan.MaxValue。源

我似乎已经解决了这个问题,但我所做的就是将绑定从WSDualHTTPBinding更改为netttcpbinding。现在它已经运行了48个小时,而以前它最多只能运行一个小时。