Это не имеет ничего общего с IIS или IIS на Windows 7, я также пробовал на тестовом сервере и те же результаты.
Это было из-за ограничений, наложенных сессионным состоянием, см. Раздел «Параллельные запросы и состояние сеанса» внизу здесь: http://msdn.microsoft.com/en-us/library/ms178581.aspx
Однако, если два одновременных запроса сделаны для одного и того же сеанса (с использованием одного и того же значения SessionID), первый запрос получает эксклюзивный доступ к информации сеанса. Второй запрос выполняется только после того, как первый запрос завершен.
Но я все еще не понимаю, почему он не запускает следующий запрос сразу после того, как первый, казалось бы, закончен. Кажется, очень фальшивая задержка в 500 мс.
Я пришел к этому вопросу Как установить тайм-аут LOCK для чтения и записи ASP.NET SessionState? , который говорит о времени блокировки для состояния сеанса.
System.Web.SessionState.SessionStateModule.LOCKED_ITEM_POLLING_INTERVAL = 500
Это магическое число, которое я искал в своем коде и в интервалах ... 500! Я знал, что это должно быть где-то.
В любом случае, чтобы исправить это, я добавил атрибут sessionstate в мои контроллеры с опцией «только для чтения»
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class BaseController : Controller{}
Подробнее об этом:
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
Я все еще думаю, что что-то не так, почему предыдущий запрос не сообщает системе, что ему больше не нужна блокировка состояния сеанса, чтобы следующий запрос мог быть выполнен?