wcf service long httpwebrequest wait导致后续请求排队

wcf service long httpwebrequest wait causes queuing of subsequent requests

我有一个 WCF 服务,它在 functionA 中对外部服务中的 functionX 进行 HttpWebRequest 调用。最初此 httpwebrequest 的超时设置为 5 分钟。

最近,外部服务响应时间超过 5 分钟(我可以接受)。所以我将 httpWebRequest.timeout 增加了 10 分钟。

同时,wcf 服务应该能够处理其他传入请求(对 functionB、functionC 等)。我现在遇到的是,如果 functionX 的响应时间超过 ~5 分钟(因此 functionA 的完成时间超过 5 分钟),我的 wcf 服务中对 functionB 的后续请求将排队/在 functionA 完成之前不处理。

最终一切正常完成,但我不明白为什么函数 B 会受到函数 A 中发生的等待的影响。

如果难以理解,请原谅我。这很奇怪,我无法理解这些片段之间的关系。

我遇到了同样的问题。我在 IIS 中托管我的服务。经过少量搜索后,我发现它是因为网络配置中的 maxconnection 限制。我将这一行添加到我的 web.config 中,问题解决了:

<system.net>
    <connectionManagement>
        <add address="*" maxconnection="1000"/>
    </connectionManagement>
</system.net>

默认最大连接值为 2。 但这是众多原因之一。您应该监视您的服务器请求以找出确切原因。

您必须使用以下属性修饰您的 WCF 服务 class

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] // The service instance is multi-threaded.
public class Service1
{
   // ...
}

我假设您的并发模式设置为 Microsoft 定义的 Single。

"服务实例是单线程的,不接受重入调用。 如果 System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode 属性 是 System.ServiceModel.InstanceContextMode.Single,并且在实例服务调用时附加消息到达,这些消息必须等到服务可用或消息超时。"