Есть ли возможное “состояние состязания” при использовании Asp. Сетевой MVC TempData через перенаправление?

.myChart {
  display: flex;
  flex-direction: column;
}
.myChart p {
  flex-grow: 1;
}

Позиционирует график внизу. Однако в настоящее время график содержит отступы. Вы можете либо использовать параметры диаграммы, чтобы удалить их, либо увеличить его размер, задать отрицательные поля и скрыть переполнение.

16
задан Dan P 26 October 2008 в 01:04
поделиться

4 ответа

Ну, просмотр кода MVC ASP.NET показывает, что, в то время как TempData хранится на сессии, он удален из сессии, когда он загружается. И это загружается в ExecuteCore Контроллера () метод.

Таким образом, я думаю, что это означало бы, что да, Вы полностью могли столкнуться с состоянием состязания, где запрос от другой вкладки браузера (у Вас был довольно хороший пример) мог вызвать эту проблему. Но это зависело бы от модели каждого браузера для того, чтобы обработать запросы. Браузер мог бы сериализировать все запросы к тому же серверу так, чтобы только один выполнился за один раз. В действительности они не сделают этого, тем не менее, они ограничат его в макс., которое является (я думаю), 5 параллельных запросов к тому же серверу.

Учитывая, что сайт MVC ASP.NET мог быть сервисными запросами к любому браузеру (это - сеть, afterall :)), это - реальный сценарий, хотя, вероятно, редкий, как Вы сказали.

9
ответ дан 30 November 2019 в 23:00
поделиться

Совершенно возможно иметь состояние состязания при использовании TempData. Однако необходимо было бы, конечно, быть "неудачными" для испытания его при нормальном использовании. Для столкновения с состоянием состязания, следующее должно все быть верным:

  1. Необходимо использовать TempData для начала.
  2. У Вас должны быть несколько браузер windows/tabs/whatevers открытый и совместное использование того же сеанса браузера.
  3. Запрос от второй вкладки браузера должен "красться в" между запросом и ответом первой вкладки браузера.

Обратите внимание, что объект № 2 во многом зависит, на котором браузере Вы используете. В зависимости от того, как Вам настраивали IE, просто потому что у Вас есть несколько открытых окон, не означает, что они совместно используют cookie браузера, и таким образом они не обязательно совместно используют сессии (которые основаны на cookie).

Однако нет никакого состояния состязания в том смысле, что что-то взрывается при столкновении с ним. Это могло бы быть тем, к чему обращается Haacked. Но можно поразить состояние состязания в том смысле, что Вы устанавливаете некоторый TempData в одном запросе и затем не вернули его в следующем запросе, где Вы думали, что собирались получить его. Это просто будет пусто.

Спасибо, Eilon

4
ответ дан 30 November 2019 в 23:00
поделиться

TempData использует объект Сессии, который не переносит эту проблему, AFAIK. Вы столкнулись с определенной проблемой с этим?

0
ответ дан 30 November 2019 в 23:00
поделиться

Я думаю, этого никогда не произойдет, хотя вначале у меня такая же путаница. Подумайте об этом, если вы запустите веб-приложение mvc в режиме отладки, тогда вы установите точку останова в перенаправлении И вы дадите tempdata значение, тогда вы получите tempdate в redirect viewResult и в другом представлении, вы обнаружите, что другой запрос никогда не будет получен до тех пор, пока действие перенаправления не будет завершено. Итак, что значит? Он сказал, что приложение mvc работать в однопоточном режиме, он может обрабатывать один запрос за один раз. Таким образом, описанный выше сценарий никогда не может произойти.

0
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: