2017-05-05 74 views
0

我有一個WCF服務,它在functionA中對外部服務中的functionX進行HttpWebRequest調用。本來httpwebrequest的超時設置爲5分鐘。wcf服務long httpwebrequest等待導致後續請求排隊

最近,外部服務已經花了超過5分鐘的時間來回應(我可以)。所以我碰到了httpWebRequest.timeout長達10分鐘。

同時,wcf服務應該能夠處理其他傳入請求(到functionB,functionC等)。我現在遇到的情況是,如果functionX花費超過5分鐘的時間來響應(並且因此functionA需要超過5分鐘才能完成),那麼在我的wcf服務中對函數B的後續請求將排隊/不處理,直到functionA完成。

最後,一切正常完成,但我不明白爲什麼functionB受到functionA中發生的等待的影響。

原諒我,如果這是很難遵循。這是一件很奇怪的事情,我不知道這些作品是如何相關的。

回答

1

您必須裝點您的WCF服務類以下屬性

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

我假設你的併發模式設置爲單定義由微軟如下。

「的服務實例是單線程的,不接受重入調用。 如果System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode屬性是System.ServiceModel.InstanceContextMode.Single和附加信息,而實例服務呼叫到達,這些消息必須等到服務可用或消息超時。「

0

我有同樣的問題。我在IIS中託管我的服務。經過一番搜索後,我發現它的網頁配置中的maxconnection限制。我在我的web.config加入這一行,問題解決了:

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

默認MAXCONNECTION值爲2 但這是衆多原因之一。你應該監視你的服務器請求,以找出確切的原因。