2008-12-17 55 views
3

我在相当苛刻的环境中使用WCF。我观察到的一种行为是我已经采取的调用冷启动的方式。当我第一次启动一个正在调用服务的客户端时,第一次调用似乎有很多失败。例如,我可以看到第一次说10个电话通过,然后接下来的200个电话全部失败。我正在异步地与服务对话。该服务然后运行并响应正常。我可以看到,这是一个端点(可能)问题而不是操作问题,因为多个不同的操作都会失败。感觉就像有一个锁,端点停止并重新设置,然后很好,但我没有证据支持这一点。WCF冷启动

服务器端跟踪中没有错误。我的客户端日志显示很多下列情况除外:

System.ServiceModel.CommunicationException:服务器未提供有意义的回复;这可能是由于合同不匹配,会话过早关闭或内部服务器错误造成的。

我考虑推行平滑算法拉平服务电话因为往往是他们中的很多在启动时。有没有其他人看过类似的行为?谢谢。

史蒂夫

编辑:该服务是在Windows服务主办。

编辑:谢谢你的评论家伙。

我从一开始就设置各种队列的数字是相当高的。关于如何扩展WCF服务,我有一些很难获得的知识。我允许2048个并发连接。我已经设置了将ListenBackLog等等

我实现了一个平滑的前1000个呼叫,并似乎得到它。这可能与JIT有关,但我对此没有证据。目前,我将离开它,看看它是否会再次出现。

回答

2

出于兴趣,你如何托管WCF服务器? IIS具有方便的池化(通过NLB如F5),但具有应用程序池回收问题,并且首先由IIS产生(首次需求)应用程序池/域/等导致的延迟。自我托管(Windows服务等)往往是更线性和可预测的性能,尤其是如果(在服务启动时)你强行加载所有内容,或许向自己提出请求(如果你明白我的意思)。

如果您不需要群集服务,考虑自收留了它。看看是否有帮助。

1

您是否尝试过增加排队的连接数为终点?可能有10个队列正在排队,而.NET CLR正在对您的代码进行JIT处理,其余的连接连接都会被拒绝,直到您的代码开始运行。

0

这是一个较老的话题,但我发现自己处于类似的情况。操作系统声明

我实现了前1000次调用的平滑,似乎得到它。

究竟他说的“平滑”我做了谷歌搜索,它似乎是一个关键词...

+0

所以,我线斜坡我的电话的速度,使我不会完全意味着什么在前60秒内钻孔。 (前1000个电话需要60秒,然后尽可能快地运行......每秒3-4K个电话)。我确实相信我有某个配置问题。此服务不再使用,我还没有看到此问题再次出现。 – 2009-09-09 18:31:55