WCF冷启动

时间:2008-12-17 20:38:21

标签: .net wcf

我在相当苛刻的环境中使用WCF。我观察到的一个行为是我采取了一些调用冷启动的行为。当我第一次启动正在调用服务的客户端时,第一次调用似乎有很多失败。例如,我可以看到第一个说十个呼叫通过然后接下来的200个呼叫都失败了一次。我是异步地与服务交谈。然后该服务运行并响应良好。我可以看到它是一个端点(可能)问题而不是操作问题,因为多个不同的操作都将失败。感觉就像有一个锁并且端点停止并重置自己然后很好,尽管我没有证据支持这一点。

服务器端跟踪没有错误。我的客户端日志显示了很多以下异常:

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

我已经考虑过实现平滑算法来平衡服务调用,因为在启动时往往会有很多它们。还有其他人见过类似的行为吗?感谢。

史蒂夫

编辑:该服务托管在Windows服务中。

编辑:感谢评论人员。

我从一开始就将各个队列上的数字设置得相当高。我对如何扩展WCF服务有一些熟练的知识。我允许2048个并发连接。我已经设置了listenBackLog等......

我为前1000次调用实现了平滑,这似乎得到了它。它可能与JIT有关,但我没有证据。暂时我会离开它,看看它是否再次发生。

3 个答案:

答案 0 :(得分:2)

出于兴趣,您如何托管WCF服务器? IIS具有方便的池(通过NLB,例如F5),但具有应用程序池回收问题,以及由IIS产生(首次要求)应用程序池/域/等首先导致的滞后。自托管(Windows服务等)往往更加线性且可预测性能,特别是如果(在服务启动期间)您强行加载所有内容,可能是通过向自己提出请求(如果您看到我的意思)。

如果您不需要群集服务,请考虑自托管服务。看看是否有帮助。

答案 1 :(得分:1)

您是否尝试增加端点的排队连接数?它可能是10个排队,而.NET CLR是JITing你的代码,其余的连接被拒绝,直到你的代码开始运行。

答案 2 :(得分:0)

这是一个较老的主题,但我发现自己处于类似情况。 OP表示

  

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

他说“平滑”是什么意思我做了谷歌搜索,它似乎不是一个关键词......