在進行WCF應用程序開發的時候,如果大量客戶端發送請求到WCF服務,往往會出現這個異常,超時。WCF服務響應超時。沒有在指定的時間00:01:00內打開操作,分配給這個操作的時間或許只是超時時間的一部分。
錯誤信息如下:
The open operation did not complete within the allotted timeout of 00:01:00. The time allotted to this operation may have been a portion of a longer timeout.
【1】錯誤截圖:
【2】原因分析:
這個超時異常的產生,直接導致的原因是,大量的客戶端請求發送給服務。我這裡使用的100個客戶端,實例化100個代理。然後請求。模擬客戶端的大量並發請求。服務基本延時100MS。模擬處理。這裡大概在10個請求的時候,服務處理出現阻塞。進而等待,最後出現超時異常。
【3】解決辦法:
涉及到大量請求的時候,可以考慮使用WCF的 ServiceThrottlingBehavior 屬性。
名稱 說明 MaxConcurrentCalls 獲取或設置一個值,該值指定整個 ServiceHost 中正在處理的最多消息數。 MaxConcurrentInstances 獲取或設置一個值,該值指定服務中可以一次執行的最多 InstanceContext 對象數。 MaxConcurrentSessions 獲取或設置一個指定 ServiceHost 對象可一次接受的最多會話數的值。這裡我們設置一下服務的限流行為就可以了。具體如下:
serviceBehaviors>
<behavior name="WCFService.WCFServiceBehavior">
<serviceTimeouts transactionTimeout="00:01:00"/>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000"/>-->
</behavior>
</serviceBehaviors>
這裡1000可以修改,根據你的實際WCF服務需求量。服務激活類型和實例調用方式。然後進行調整。修改完畢以後,重新啟動服務,基本就正常了。
出處:http://www.cnblogs.com/frank_xl/archive/2009/07/22/1528911.html