程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WCF分布式開發常見錯誤(20):TimeoutException was unhandled

WCF分布式開發常見錯誤(20):TimeoutException was unhandled

編輯:關於.NET

在進行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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved