wcf服务长httpwebrequest等待导致后续请求排队

时间:2017-05-05 21:16:33

标签: c# .net wcf httpwebrequest

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

最近,外部服务的响应时间超过5分钟(我很乐意)。所以我将httpWebRequest.timeout提高了10分钟。

同时,wcf服务应该能够处理其他传入请求(到functionB,functionC等)。我现在经历的是,如果functionX需要超过5分钟的响应时间(因此functionA需要超过5分钟才能完成),我的wcf服务中对functionB的后续请求将排队等待,直到functionA完成为止。 / p>

最后一切都正常完成,但我不明白为什么functionB会受到functionA中发生的等待的影响。

如果难以理解,请原谅我。这是一个奇怪的问题,我无法解决这些问题的关系。

2 个答案:

答案 0 :(得分:1)

您必须使用以下属性

装饰您的WCF服务类
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] // The service instance is multi-threaded.
public class Service1
{
   // ...
}

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

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

答案 1 :(得分:0)

我有同样的问题。我在IIS中托管我的服务。经过一点点搜索我发现它因为web配置中的maxconnection限制。我将这一行添加到我的web.config并解决了问题:

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

默认情况下,maxconnection值为2。 但这是众多原因之一。您应该监视您的服务器请求,以找出确切的原因。