WCF超时处理

本文关键字:处理 超时 WCF | 更新日期: 2023-09-27 18:18:18

我们目前正在开发一个软件解决方案,它有一个客户端和一些它所使用的WCF服务。我们遇到的问题是WCF服务在一段时间不活动后会超时。据我所知,有两种方法可以解决这个问题:

  1. 增加超时(据我所知,这通常是不推荐的。如。将timeout设置为infinite/weeks被认为是不好的做法)
  2. 从客户端定期ping WCF服务(我不确定我是不是他的超级粉丝,因为它会增加冗余,周期性调用)
  3. 处理超时问题并尝试重新连接(这是缓慢的,需要大量的手动代码)
  4. 可靠会话——一些消息来源提到这是内置的WCF ping和消息可靠性机制,但其他消息来源提到这仍然会超时。

解决这个问题的建议/最佳方法是什么?这方面有什么官方阅读材料吗?我自己找不到那么多信息

谢谢!

WCF超时处理

正如我所看到的,你必须使用你所陈述的观点的组合。

  1. 你是对的,增加超时是不好的做法,会给你带来很多问题。
  2. 如果你不想使用可靠会话,那么Ping是唯一适用的保持连接的方法。
  3. 您需要处理这些事情,无论是否发生超时,连接丢失或抛出异常。你的连接有很多可能出错。
  4. 可靠会话是一种不实现ping的好方法,但从技术上讲,它几乎是一样的。WCF自动发送"我还在这里"请求。

结论是,你需要第3点、第2点或第4点。为了减少第3点的手动代码,您可以在ServiceClient周围使用代理或包装器,如果旧连接在请求期间出现故障,它将建立一个新连接。第4点很容易实现,因为您只需要在配置中对绑定进行一些小的添加。而且交通开销也不是很大。第2点是最昂贵的方法,你需要处理一个只ping服务器的线程/任务,并且需要扩展服务。但是正如您之前所说,可靠会话可能会失败,而ping应该为您带来安全。

您应该问自己WCF端点正在做什么?您设置命令的方式是最优的吗?也许让花费很长时间的端点基于允许快速查询的轮询系统而不是等待端点操作的结果会更好。您还应该将数据传输视为一个可能的问题。你传回的数据量是不是很多?

为了得到一个更有针对性的答案,我们需要了解更多关于特定端点的信息,以及服务的其他职责。