繁忙的WCF服务的策略

时间:2011-11-03 16:55:58

标签: wcf c#-4.0

我有一个非常繁忙的自托管WCF服务器,需要2000多个客户端频繁更新其状态。我发现服务器的CPU利用率一直保持在70%左右,客户端有50%的机会实际连接到服务器。他们将在60秒后超时。这是有问题的,因为如果服务器没有从客户端收到回复,它将假定客户端处于脱机状态。

我已经实现了限制,所以我可以调整并发连接/会话/等等,但是如果我没有弄错,增加它只会导致更高的CPU利用率和更糟的连接问题。正确?

将超时时间增加到60秒以上会有帮助吗?我不确定它是如何工作的,但客户端是否会处于一种队列状态,直到服务器可以发出请求为止?或者最好将超时设置为更小的值,并使客户端更频繁地检查它是否无法连接(这似乎只会使问题在某种意义上变得更糟)?

2 个答案:

答案 0 :(得分:1)

如果服务器知道客户端是否仍然连接非常重要,我认为完全不依赖于WCF是最好的选择。

也许你的服务器应该有某种ping机制,允许它根据某种计时器ping客户机,反之亦然。

如果你非常担心这些消息总是会通过,无论如何,那么我建议探索可靠的服务。查看enableReliableSession行为属性。我建议至少阅读Juval Lowy的编程WCF服务的第一章,该书可作为本书的Kindle样本免费提供。

答案 1 :(得分:0)

增加超时可能有帮助,但可能不多,而且惊人的不断增加的超时是http://www.thedailywtf.com的一个主题。如果客户端第一次无法通过,那么让客户端锤击服务器肯定会引起痛苦。

如果你关心的只是知道客户端是否在那里,那么下一层或两层并让客户端偶尔发送一个HTTP POST是否可行? WCF需要一些活跃的来回,但POST可以放在那里,直到你的服务器有时间处理它,客户端可以发送它而忘记它。