2009-05-23 130 views
29

我在.Net WCF服務中間歇性地得到以下異常。 「 」位於http://MyServer/TestWCF/MyService.svc的HTTP服務太忙。「WCF服務太忙錯誤

我在這裏錯過了什麼嗎?

我使用基本的http綁定並啓用了WCF限制。

<basicHttpBinding> 
     <binding name="BasicHttpBinding_MyService" maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" textEncoding="utf-16" sendTimeout="00:01:00" > 
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="163840000" 
         maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" /> 
     </binding> 

。 。 。 。

<behavior name="MyWCFServices.MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceThrottling 
        maxConcurrentCalls="16" 
        maxConcurrentInstances="2147483647" 
        maxConcurrentSessions="10"/> 
     </behavior> 

調節是否有助於解決問題? 另外,我是否可以知道爲高流量網站節流的推薦參數值?

回答

10

您肯定可以嘗試將服務調節行爲中的maxConcurrentSessionsmaxConcurrentCalls增加到標準值30左右,看看是否會導致錯誤消失。服務器太忙似乎表明有更多請求進入服務限制行爲所允許的區域之內,並且由於在給定的超時期限內沒有服務實例可用於服務它們,所以它們已被丟棄。

+0

感謝您的答案...我需要啓用在客戶端和服務器端web.configs節流? – 2009-05-25 22:29:23

+0

另外,我想知道什麼是maxConcurrentInstances參數的建議值? – 2009-05-25 22:33:01

+0

嗨史蒂夫 - 沒有必要在客戶端上處理這個 - 這是服務器端設置。至於maxConcurrentInstances:問問你自己要同時處理多少個客戶請求。 5? 10?處理請求需要多長時間?一個好的起點可能是30,並看看a)這有助於你的服務更加快速響應,並且b)不會使服務器過載。在看到它的行爲後,根據需要調整。 – 2009-05-26 05:03:56

2

它不僅僅是maxConcurrentSessions,它也是會話持續的時間。

如果客戶端不關閉連接,它將保持打開狀態,直至timesout。然後,您可以在服務器上以極少的活動達到maxConcurrentSessions限制。

1

此不同的是我所知道的是,如果你使用的是會話的唯一來源,你設法擊中MaxPendingChannels油門,。它的默認值是4,非常低。你可以嘗試將它設置得更高(例如128),或者如果你只是想重現,設置爲1,你應該在負載測試下看到它。

在這裏看到關於會話的更多信息:http://msdn.microsoft.com/en-us/library/ms733795.aspx

9

我的答案是,檢查應用程序池已啓動並順利?

我見過當應用程序池已因死的異常被拋出未捕獲發生這個錯誤。

例如,考慮自定義配置部分 - 具有有錯誤,會導致它甚至開始之前,你的應用程序失敗。在很短的時間內,太多這樣的內容會殺死應用程序池。

4

如果您服務您的帳戶(身份)下運行,它很可能是你最近更改了密碼 - 您需要同時重新設置在高級設置其IIS應用程序池|身份對話框。

1

我只是遇到了這個錯誤,它簡化爲一個簡單的配置問題。我有一個完全相同的端口和相同的接口(模擬服務)的服務。我使用適當的命令行開關運行了服務,以運行我期望的「原始」服務。錯誤消失了。

0

我的解決辦法是,檢查app.config文件,服務標籤是否是有這項服務。

如:

<service name="MyServices.ServiceName"> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TestBinding" contract="MyServices.ServiceName"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/MyServices/ServiceName/" /> 
      </baseAddresses> 
     </host> 
</service> 
2

請務必檢查內部異常,也;在我們的部署,我們禁用一個WCF Web服務的應用程序池,客戶開始在這段時間收到此錯誤:

System.ServiceModel.ServerTooBusyException: The HTTP service located at https://ourserver.x.com/path/service.svc is too busy. ---> System.Net.WebException: The remote server returned an error: (503) Server Unavailable.

因此,在這種情況下,HTTP錯誤503正在(?MIS)解釋爲「服務器太忙了」。