2016-11-16 135 views
0

我们目前正在开发一个软件解决方案,其中包含一个客户端和一些WCF服务。我们遇到的问题是WCF服务在闲置一段时间后超时。据我了解,有2种方法来解决此问题:WCF超时处理

  1. 增加超时(据我了解,这是一般不建议如设置超时为无穷/周被认为是不好的做法。)
  2. 定期从客户端ping WCF服务(我不确定我是否是他的粉丝,因为它会添加多余的定期呼叫)
  3. 处理超时问题并尝试重新连接(这很慢并且需要一个很多手动代码)
  4. 可靠的会话 - 一些消息来源提到这是内置的WCF ping和消息可靠性机制,但其他来源提到这仍然会超时。

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

谢谢!

回答

1

正如我所看到的,你必须结合你所说的要点。

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

这个结论是,你需要点3和点2或4.为了减少手动代码点3,你可以使用代理或一个包装你的ServiceClient,建立一个新的连接,如果在请求期间,老人有故障。第4点很容易实现,因为在你的配置中你只需要添加一些小的附件。而流量开销并不大。第2点是最昂贵的方式,您需要处理只能ping服务器和服务需要扩展的线程/任务。但正如你之前所说的,可靠会议可能会失败,而Pings应该把你带到安全的一边。

+0

这听起来似乎是对的,我猜测。感谢您分享你的观点:)你有很多WCF的经验吗?你最终实现了类似的模式吗? – Ross

+1

@Ross是的,我们在wcf中编写了一个动态双工服务,作为几个室内项目的基础。我的回答反映了我过去3年在wcf的所有经历。我们实现了第3点和第4点,但可靠会话并不像他们应该那样可靠;)因此,我们实现了Ping,因此,所有的运行都是完美的。 – Rabban

+0

很高兴听到!非常感谢分享你的经验:) – Ross

1

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

为了得到更明确的答案,我们需要了解更多关于特定端点以及服务的其他责任。

+0

我们有几个不同的WCF服务用于不同的目的。有些是单工,有些是双工。他们都执行快速操作(最多几秒钟,大多数速度更快)。问题在于其中有一些是间歇性使用的,所以对这些服务的请求之间可能会有数小时的时间,我们希望让这些服务保持运行,而不必每次都使用它们,这意味着延迟。 – Ross

+0

您应该没有问题让两个进程运行。尝试在一段时间后调用某个呼叫时,是否尝试过在两个进程之间重新建立连接? –

+0

意外击中'输入'。 如果您为每个服务命令重新建立连接,则可能会使连接问题更容易。 你是程序应该有循环,他们正在运行,以便能够根据请求回答端点命令。不应该每次都需要启动进程。 他们为什么会倒下?如果这是由于超时造成的,那么这是服务之间的命令耗时过长的问题。 –