Подтвердить что ты не робот

ASP.NET MVC и Ajax, одновременные запросы?

AJAX новичок здесь!
На данный момент в моем веб-приложении ASP.NET MVC мои запросы AJAX кажутся загруженными или поставленными в очередь, im not sure.
Никакие запросы, похоже, не будут завершены до завершения предыдущего запроса.
Как я могу заставить запросы возвращаться независимо?
Я не обязательно хочу, чтобы кто-то дал мне ответ, но, возможно, некоторые ссылки на хорошие учебники или ресурсы, которые могли бы помочь. Благодаря

4b9b3361

Ответ 1

Я расширяю ответ на Lachlan Roche, который правильный.

Рамка ASP.NET будет "однопоточными" запросами, связанными с областью сеанса (глобальным ресурсом), чтобы один запрос не мешал другому. В WebForms я думаю, что вы можете использовать директиву "Страница", чтобы указать, что отдельные страницы не используют сеанс и поэтому не нужно обрабатывать синхронно, как это.

Проблема заключается в том, что в ASP.NET MVC все запросы используют Session, поскольку он использовался для реализации TempData. Вы можете полностью отключить состояние сеанса, как указал Лачлан Рош, или вы можете разобраться с этим в каждом конкретном случае.

Возможное решение может состоять в том, чтобы запустить собственные потоки фона для обработки любого длинного кода, чтобы первоначальный запрос "завершался" как можно быстрее.

Ответ 2

ASP.NET будет последовательно обрабатывать запросы на основе сеанса, если сеансы не настроены как отключенные или не прочитаны только в web.config через enableSessionState в элементе страницы.

Поскольку это параметр страницы, это не повлияет на контроллеры MVC, и они будут по-прежнему обрабатываться последовательным запросом.

Любопытно, что даже если сеансы отключены или настроены на чтение, мы все равно можем читать и записывать данные сеанса. Это влияет только на блокировку сеанса, которая вызывает обработку последовательного запроса.

<system.web>
    <pages enableSessionState="ReadOnly"/>
</system.web>

Страницы также могут иметь свойство enableSessionState, хотя это не относится к представлениям MVC.

<%@ Page EnableSessionState="True" %>

Ответ 3

С выпуском ASP.MVC 3 теперь вы можете добавить атрибут для своих контроллеров, чтобы пометить сеанс как readonly, что позволяет одновременным вызовам действий от одного и того же клиента.

Поддержка контроллера без использования:

Sessionless Controller - еще одна отличная новая функция в ASP.NET MVC 3. С помощью контроллера без сеанса вы можете легко контролировать поведение сеанса для контроллеров. Например, вы можете сделать свой сеанс HomeController отключенным или ReadOnly, что позволяет выполнять одновременное выполнение запроса для одного пользователя. Подробнее см. Параллельные запросы в ASP.NET MVC и HowTo: Контроллер сеанса в MVC3 - что и почему?.

- от эта статья DZone.

Добавив SessionState(SessionStateBehaviour.Disabled) к вашему контроллеру, среда выполнения позволит вам одновременно вызывать несколько действий из того же сеанса браузера.

К сожалению, я не думаю, что есть способ отметить действие, чтобы отключить сеанс только при вызове этого действия, поэтому, если у вас есть контроллер, который имеет некоторые действия, требующие сеанса, а другие нет, вам нужно будет переместить те, которые не входят в отдельный контроллер.

В более поздних версиях ASP MVC вы можете украсить отдельные классы контроллеров SessionStateAttribute

[System.Web.Mvc.SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : Controller 
{
}

Ответ 4

С выпуском .NET Framework v3.0 вы можете использовать перечисление SessionStateBehavior с SessionStateAttribute:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : BaseController { }

Ответ 5

Ну, параллельный запрос больше зависит от браузера, так как если вы стреляете, предположим, что 10 одновременных запросов к действию. Используя AJax в Mozilla и то же самое с помощью IE 8, то вы обнаружите, что Mozilla имеет стиль для запуска одного запроса, ожидающего ответа, а затем пожара второй и т.д.... это одно за другим, в то время как в IE * этот огонь включает около 6 одновременных запросов на сервер.

Таким образом, параллельный запрос также зависит от типа браузера.

Ответ 6

Я предлагаю использовать jQuery для ваших нужд ajax с помощью asp.net mvc, я использовал его исключительно, и это было очень просто.

Что касается учебников, я бы посмотрел на это: http://docs.jquery.com/Ajax

Есть множество вариантов для игры, и я также предлагаю загрузить firebug, чтобы вы могли смотреть запросы, запускаемые с вашей страницы асинхронно, и посмотреть, стреляют ли они, и что они возвращают и т.д.

Как и другая сторона, запрос AJAX асинхронен и не попадает в очередь, и все они возвращаются независимо, когда они заканчиваются, поэтому, если вы смотрите в firebug, будет легко увидеть, что происходит за кулисами и до отладчик получает удар