Включение одновременных запросов из одного сеанса в 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)]

Это установит сеанс, чтобы не блокировать, и поэтому вы сможете делать параллельные запросы

Вы можете прочитать больше об этом здесь

Другие вопросы по тегам