Включение одновременных запросов из одного сеанса в ASP.NET Core
РЕДАКТИРОВАТЬ: Это было, очевидно, проблема с тестированием в браузере, а не с кодом. Сеансы в Core по умолчанию отключены, как и должно быть.
Оригинальный вопрос:
Я работаю над веб-API, который должен обрабатывать несколько запросов одновременно, даже с одного и того же клиента. Это приложение ASP.NET Core MVC (1.1.2), в настоящее время предназначенное для полной платформы (4.5.2), главным образом для совместимости с другими библиотеками.
Когда я впервые проверил мой параллелизм, я был удивлен, что запросы не были параллельными вообще. Я погуглил и обнаружил, что ASP.NET не обрабатывает запросы в сеансе одновременно, а ставит их в очередь. Быстрый тест показывает, что сессии могут быть виновником:
[HttpGet("sleep")]
public string Sleep()
{
Thread.Sleep(5000);
return $"Done at {DateTime.Now:u}";
}
Когда я быстро запрашиваю это из нескольких вкладок в одном браузере, между каждой вкладкой уходит 5 секунд. Это не тот случай, когда я использую несколько браузеров, он отвечает несколько раз в течение 5-секундного окна.
При поиске решения я продолжал искать способы отключить состояние сеанса в ASP.NET, но ничего для Core.
Что касается сессий, я использую шаблон проекта API по умолчанию и ничего не сделал для того, чтобы специально включить / настроить состояние сеанса.
Есть ли способ избавиться от состояния сеанса в ASP.NET Core? Или есть лучшее решение для одновременных запросов?
1 ответ
У вас уже включены параллельные запросы в ASP.NET Core, нет необходимости изменять ваш код. Сеанс в ASP.NET Core не блокируется. Если несколько запросов модифицируют сеанс, последнее действие будет выиграно.
Если вы установите этот атрибут в вашем классе контроллера
[SessionState(SessionStateBehavior.ReadOnly)]
Это установит сеанс, чтобы не блокировать, и поэтому вы сможете делать параллельные запросы
Вы можете прочитать больше об этом здесь