2011-09-21 2 views
7

私の開発マシンでASP.NET MVCプロジェクトが実行されています。私は、次の操作を行いIISは、非同期リクエストとの応答の間に多くの遅延を発生させます。

var requests = ["http://myserver.com/news/details/113834", 
"http://myserver.com/tag/details?ids=113834&entityType=23", 
"http://myserver.com/publish/details?ids=113834&entityType=23", 
"http://myserver.com/generalproperty/details?ids=113834&entityType=23", 
"http://myserver.com/category/details?ids=113834&entityType=23"]; 

var f = new Date().getTime(); 
$.each(requests, function(k,v) { 
    $.ajax({ 
    url :v, 
    async : true, 
    type :'get', 
    success : function(data) { 
     console.log(new Date().getTime() -f); 
    }}); 
}) 

それから私は(約)12、521,1025,1550、2067 async result http://martinhansen.no/hostedimages/async.PNG

を次のような結果を得る私はfalseに非同期に切り替えた場合、私が得ます: 14,32,49,58,68 sync result http://martinhansen.no/hostedimages/sync.PNG

要求がキューに入れられている間に、しばらくしてから500秒ごとに応答します。 データベースコールではなく空のテキストを返すようにしました。データベースではありません。

Windows 7のIIS 7.5には制限がありますか?私は変更することができます設定? ユーザーあたりの最大同時リクエスト数などが疑われます。そして500ミリ秒ごとに応答するだけであなたを「罰する」。そのため、人々はそれを実際のサーバーとして使用しません。

そうでしょうか?それを避ける方法はありますか?

答えて

8

IISとはまったく関係がありませんし、Windows 7ではIISとは何の関係もありません。また、テストサーバーと同じ結果を試しました。

それはここ一番下にある「同時要求とセッション状態」を参照してください、なぜならてsessionStateによる制限であった

:2つの同時要求が使って(同じセッションのために作られている場合は、しかし、http://msdn.microsoft.com/en-us/library/ms178581.aspx

同じSessionID値)、最初の要求はセッション情報への排他的アクセスを取得します。 2番目の要求は、最初の要求が完了した後にのみ実行されます。

しかし、私はまだ最初のものが一見終わった直後に次のリクエストを発しない理由はまだ分かりません。それは非常に500ミリ秒遅れているようです。

私はこの質問How to set the ASP.NET SessionState read-write LOCK time-out?のセッション状態のロックアウト時間について説明しました。

私は.. 500のための私のコードとinterwebsを検索してきたマジックナンバーだSystem.Web.SessionState.SessionStateModule.LOCKED_ITEM_POLLING_INTERVAL = 500

!私はそれがどこかになければならないことを知っていた。

http://afana.me/post/session-less-controllers-and-TempData-ASPNET-MVC.aspx

http://weblogs.asp.net/imranbaloch/archive/2010/07/10/concurrent-requests-in-asp-net-mvc.aspx

とにかく、この問題を解決するために、私はそれについて続きを読む読み取り専用

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] 
public class BaseController : Controller{} 

のオプションで私のコントローラにてsessionState属性を追加しました

私はまだ何かが間違っていると思っています、なぜ以前の要求はシステムにそれがもはや次の要求が完了できるように、セッション状態のロックを解除しますか?

0

一度に送信するリクエストの数はいくつですか?クライアントOSのIISはlimited to 10 simultaneous connectionsです。この制限を超えると、着信接続をキューに投げ込み、スロットが開いたときに処理します。

これは、クライアントのOSがサーバーOSプラットフォームの売上を奪うために使用されていないことをMSが保証するための長い時間のケースでした。

関連する問題