Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WCF冷启动_.net_Wcf - Fatal编程技术网

.net WCF冷启动

.net WCF冷启动,.net,wcf,.net,Wcf,我在相当苛刻的环境中使用WCF。我观察到的一种行为是我称之为冷启动的行为。当我第一次启动调用服务的客户机时,在第一次调用中似乎有很多失败。例如,我可以看到前10个呼叫通过,然后接下来的200个呼叫全部失败。我正在异步地与服务交谈。然后服务运行并响应良好。我可以看出这是一个端点(可能)问题,而不是操作问题,因为多个不同的操作都会失败。感觉就像有一个锁,端点暂停并自行重置,然后就好了,尽管我没有证据支持这一点 服务器端跟踪中没有错误。我的客户端日志显示了许多以下异常: System.ServiceM

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

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

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

我考虑过实现一个平滑算法来平衡服务调用,因为在启动时往往会有很多服务调用。还有谁见过类似的行为吗?谢谢

史蒂夫

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

编辑:谢谢大家的评论

我从一开始就把各种排队的人数定得相当高。关于如何扩展WCF服务,我有一些来之不易的知识。我允许2048个并发连接。我已经设置了listenBackLog等


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

出于兴趣,您是如何托管WCF服务器的?IIS具有方便的池(通过NLB,如F5),但存在应用程序池回收问题,以及IIS首先生成(按需)应用程序池/域/etc所导致的延迟。自托管(windows服务等)的性能往往更具线性和可预测性,尤其是在(服务启动期间)您强制加载所有内容时,可能是通过向自己发出请求(如果您明白我的意思的话)


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

您是否尝试过增加端点的排队连接数?可能是10个排队,而.NET CLR正在JIT您的代码时,其余的输入连接将被拒绝,直到您的代码开始运行。

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

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


他所说的“平滑”到底是什么意思?我在谷歌上搜索过,但它似乎不是一个关键词

因此,我线性地提高了通话速度,这样在前60秒我就不会全神贯注了。(前1000次呼叫需要60秒,然后以尽可能快的速度运行…每秒3-4K次呼叫)。我确信我在某个地方遇到了配置问题。此服务已不再使用,我没有看到此问题再次出现。