2009-05-23 52 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> 

問題を解決するのに調整が役立ちますか? また、トラフィックの多いWebサイトのスロットルに関する推奨パラメータ値を知っていますか?

答えて

10

サービス調整の動作でmaxConcurrentSessionsmaxConcurrentCallsを標準値の30程度に増やして、エラーが消えるかどうかを確かめることができます。サーバの使用量が多すぎると、サービスのスロットリング動作によって許可された領域よりも多くの要求が到着したことを示している可能性があり、指定されたタイムアウト時間内にサービスインスタンスを使用できるサービスインスタンスがないため、

+0

urさんのおかげで答えが...私は両方のクライアントとサーバー側のweb.configsでスロットルを有効にする必要がありますか? –

+0

また、maxConcurrentInstancesパラメータの推奨値は何ですか? –

+0

こんにちはスティーブ - これはクライアント上で処理する必要はありません - これはサーバー側のみの設定です。 maxConcurrentInstancesについて:同時に処理したいクライアントからの要求数を確認してください。 5? 10?リクエストを処理するのにどれくらい時間がかかりますか?良い出発点は30かもしれませんし、a)これがあなたのサービスをより敏感にするのに役立ち、b)あなたのサーバーに過負荷を与えないかどうかを見てください。あなたはそれがどのように動作するかを見た後、必要に応じて微調整します。 –

2

maxConcurrentSessionsだけでなく、セッションの持続時間もあります。

クライアントが接続を閉じないと、タイムアウトするまで開いたままになります。 maxConcurrentSessionsの制限値に達すると、サーバー上のアクティビティはほとんど変化しません。

+2

実際には、クライアントはusingステートメントを使用すべきではありません。クリーンアップは明示的に処理する必要があります。詳細はhttp://msdn.microsoft.com/en-us/library/aa355056.aspxを参照してください。 –

+0

@Anthony、コメントのおかげで、私は使用している部分を削除しました。これは2009年、私は若くて、それほど良く分からなかったからです:) –

+1

@AntSwift:多くの人がそれを知っていますが、これはしません。 – abatishchev

1

私が知っているこの例外の唯一の原因は、セッションを使用していて、MaxPendingChannelsスロットルをヒットした場合です。そのデフォルトは4のようなかなり低いものです。これを高く設定することもできます(たとえば128)。または、再作成するだけなら1に設定し、負荷テストの下でそれを確認する必要があります。

セッションの詳細については、こちらを参照してください:http://msdn.microsoft.com/en-us/library/ms733795.aspx

9

私の答えは、アプリケーションプールが起動してもあるかどうかを確認、でしょうか?

キャッチされていない例外がスローされたためにアプリケーションプールが終了したときにこのエラーが発生しています。

たとえば、カスタム設定セクションを考えてみましょう。そこにエラーがあると、アプリが起動する前にエラーが発生します。短い時間内にこれらのうちの多くがアプリケーションプールを削除します。

+0

これを最初に確認してください。それは "見て"良いかもしれませんが、あなたがマネージャからアプリケーションプールを停止する場合、あなたはそれを再起動することができなくなります。すべての処理を再開するには、コマンドラインから "net stop w3svc"と "net start w3svc"を使います。 – tofutim

+0

ドアの外に出てきた私の正気を保存していただきありがとうございます。 – eouw0o83hf

+0

これは私のためにそれをやった!アプリプールとビンゴをリサイクル – JeremyS

4

サービスがアカウント(ID)で実行されている場合は、最近パスワードを変更した可能性があります.Adaptive Settings(高度設定)でIISアプリケーションプール用にパスワードをリセットする必要があります。 ID]ダイアログボックスを開きます。

+1

+1これはまさに実稼働環境で行われました。サーバーがビジーであることを示す非常に誤解を招くエラーメッセージ。ブー。これを指摘してくれてありがとう! –

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は、サーバ」と解釈(ミス?)されていますあまりにも忙しい"。

関連する問題