【问题标题】:WCF Channel: Server not responding after 10 minutesWCF 频道:服务器在 10 分钟后没有响应
【发布时间】:2016-12-20 08:11:37
【问题描述】:

我创建了一个由客户端和服务器组成的架构,它们在 localhost 中的 WCF 通道上进行通信,一切正常,但如果两者之间没有任何活动(来自客户端的请求)超过 10 分钟,则服务器不会不再回应。连接仍然存在,只是服务器没有响应客户端请求,因此客户端必须断开连接并重新连接才能向服务器发送请求。也许我漏掉了一些参数。

我使用的地址是:net.tcp://localhost:8080/ICS; 通道类型:双工;

【问题讨论】:

  • 看看inactivityTimeoutreceiveTimeout
  • 是的,这似乎是问题所在。我发现这篇文章rauch.io/2015/06/25/all-wcf-timeouts-explained 解释了所有超时,并且 Inactivity 和 Receiving 的超时为 10 分钟。
  • 是服务操作没有在合理时间内返回的问题,还是您知道服务操作长时间运行但调用者超时的问题?
  • 操作时间很短(几秒钟),系统可以连续工作好几天...

标签: c# wcf wcf-data-services wcf-binding wcf-security


【解决方案1】:

这里的问题在于receiveTimeout。服务主机使用此超时来确定何时丢弃空闲连接。如果在配置的时间范围内没有收到任何消息,则关闭连接。默认为 10 分钟。

【讨论】:

  • 非活动超时仅在您使用 WCF 支持 WS-ReliableMessaging 时相关。 OP 问题中没有任何内容表明它们是。此外,接收超时是消费者端设置,对服务端没有影响,问题似乎出在 OPs 案例中。
  • 我很确定receiveTimeout 不是消费者端设置。而且我还在那里添加了inactivityTimeout,因为存在一些依赖关系,并且两者都应该对齐,因为某些组合没有意义。
  • 更新,ReliableMessaging 被禁用,因此编辑 InactivityTimeout 没有意义,正如 Tom Redfern 所说。而更改我的绑定设置的 ReceiveTimeout 参数可以解决问题。
  • @Lepijohnny 实际上你是对的。为我关于recieveTimeout 的错误断言道歉。请编辑您的问题以反映,我会支持您。
【解决方案2】:

更新,ReliableMessaging 未启用,因此编辑 InactivityTimeout 没有意义

而更改我的绑定设置的ReceiveTimeout 参数可以解决问题。

我的代码:

var bind = new NetTcpBinding();                   // my binding instance
var relSessionEnabled = bind.ReliableSession.Enabled;            // this is false
var inactivityTimeout = bind.ReliableSession.InactivityTimeout;  // this is 10 minutes
bind.ReceiveTimeout = TimeSpan.MaxValue;          // this was 10 minutes before this instructuion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多