【问题标题】:WCF The Reliable Session Was FaultedWCF 可靠会话出现故障
【发布时间】:2011-08-31 16:05:00
【问题描述】:

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

这可行,但在一段时间不活动后,它会停止工作并显示一个错误,指出可靠会话出现故障。我已经阅读了几篇关于这个问题的文章,但它并没有帮助找到它。我已经进行了所有必要的异常处理,但这没有帮助。

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

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

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

【问题讨论】:

  • InnerException 中没有关于可能导致问题的原因吗?
  • 这似乎是inactivitytimeout设置造成的?我的连接是持久性的,为什么还要有不活动超时?在理想情况下,我们的服务器不会导致错误,因此错误服务不会向监控应用程序报告任何内容。我仍然希望连接打开以防万一。可以完全禁用不活动超时吗?如果没有,有没有办法检测到连接已关闭以便重新打开?
  • 所以这似乎是这里提到的一个错误smartasses.be/2009/01/26/wcf-reliable-session-and-keep-alives 解决方案是在给定的时间间隔“ping”监视器应用程序。对我来说似乎真的很傻,但你去吧。可靠会话的一部分肯定是确保连接在需要的时间内保持活动状态?

标签: c# .net wcf wsdualhttpbinding


【解决方案1】:

您说得对,您需要增加不活动超时时间。但是当您使用可靠会话时,receiveTimeout 也会被考虑在内。来自这个MSDN Article:

使用可靠会话时,有两种不同的不活动状态 必须满足的计时器才能保持连接处于活动状态。如果要么 这些不活动计时器中的一个会关闭,然后断开连接。

第一个不活动计时器在可靠会话上并被调用 不活动超时。如果没有消息,则此不活动计时器会触发, 在超时时间内收到应用程序或基础架构 时期。基础结构消息是为 通道堆栈中的协议之一的用途,例如 保持活动或确认,而不是包含应用程序 数据。

第二个不活动计时器在服务上并使用 绑定的 ReceiveTimeout 设置。此不活动计时器在以下情况下触发 在超时期限内未收到任何应用程序消息。这个 例如,指定客户端可能花费的最长时间发送 在服务器关闭之前至少向服务器发送一条消息 会话使用的通道。此行为可确保客户端无法 任意长时间持有服务器资源。

由于如果任何一个不活动计时器触发,连接就会断开, 一旦大于 ReceiveTimeout 就增加 InactivityTimeout 没有效果。这两个超时的默认值为 10 分钟, 所以你总是必须同时增加它们才能有所作为 使用可靠的会话。

将这两个值都设置为“Infinite”(如果您使用的是配置文件)或 TimeSpan.MaxValue(如果您在代码中设置绑定)应该可以实现您想要的。

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

【讨论】:

  • 当我更新 app.config 以使其值为“无限”时,我收到警告说它不是有效值。那么如何将其设置为无限呢?
  • 我已将两个超时都设置为 24.20:31:23.6470000(您似乎可以设置的最大值)。大约 10 分钟不活动后,它仍然会超时。
  • 编辑了我关于 Infinite 关键字的答案。您可以在原始问题中发布您的绑定配置吗?
【解决方案2】:

我似乎已经解决了这个问题,但我所做的只是将绑定从 WSDualHTTPBinding 更改为 NetTcpBindng。它现在已经运行了 48 小时,而之前它不会运行超过一个小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2011-06-09
    • 2010-12-06
    • 2012-12-08
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多