2013-03-21 17 views
9

私はasp.net MVC 4コントローラthatsメソッドがajax経由で呼び出されています。asp.net mvc 4コントローラは、複数のajax呼び出しを並列に実行します。

問題は、ajax要求がコントローラによって順番に処理されることです。 これは、ページをロードする時間がすべてのajax要求の合計であり、最長のajax要求ではないため、パフォーマンスの問題を引き起こします。

これを実証するために、最初の( "ReadOverview8Week")メソッドにブレークポイントを設定します。 これらのメソッドのそれぞれは、個別性を実行するために約600msかかります。

http://i.stack.imgur.com/HhtEX.png

どのように私は、コントローラは並列に3つのすべての要求に応答することができますか?私は、IIS 8

を使用しています これは(剣道UIデータソースから)AJAXリクエスト

.DataSource(dataSource => dataSource.Ajax() 
    .Read(read => read.Action("ReadAllSitesOverview", "AbuseCase").Type(HttpVerbs.Get)) 

おかげです。

+0

ajaxリクエストのコードを含めます。 – EkoostikMartin

+0

この例のajaxリクエストは、剣道データソースからのものでした。 –

答えて

14

あなたが直面している問題は、ASP.NETがセッションを管理している方法に起因しています。ここでASP.NET Session State Overview同時要求し、セッション状態セクション)から最も重要な部分は、次のとおりです。

ASP.NETセッション状態へのアクセスは意味セッションごとの排他的である2人の異なるユーザーは、アクセスへの同時要求を行う場合それぞれ別々のセッションが同時に許可されます。ただし、同じSessionID値を使用して同じセッションに対して2つの同時要求が行われた場合、最初の要求はセッション情報への排他的アクセスを取得します。 2番目の要求は、最初の要求が完了した後にのみ実行されます。

あなたの操作でセッションにアクセスする必要がない場合は、問題を解決できます。そのような場合は、SessionStateAttribute属性でコントローラを飾ることができます:

[SessionState(SessionStateBehavior.Disabled)] 

この方法コントローラは、セッションを待つ必要はありません。

アクションにセッションへの読み取りアクセスのみが必要な場合は、SessionStateBehavior.ReadOnlyの値を試してみることができます。これにより、排他ロックは発生しませんが、依然として読み書き要求によって設定されたロックを待機する必要があります。

+0

これをコントローラに取り付けて問題を解決してください!ありがとうございました。 –

+0

あなたは天才です、男!これも私の問題を解決しました – KorsaR

+0

ウェブAPIでこれを行う方法。私は私が気づいた、私は短時間で複数回apiを打つ、彼らはずっと遅く実行される。 –

関連する問題