действия asp.net MVC являются однопользовательскими? - PullRequest
2 голосов
/ 17 января 2012

Я пытаюсь использовать параллельную функциональность в моем приложении asp.net mvc 2. Я загрузил список IP-адресов в виде таблицы в моем представлении. И я хочу посмотреть, можно ли их пинговать. Поэтому я запускаю действие GetStatus (string ip) на контроллере для каждого IP-адреса с помощью jQuery.ajax (). Я могу видеть в firebug, что все запросы были запущены. Но на стороне сервера в логах log4net я вижу, что эти запросы выполняются последовательно.

Итак, у меня есть 2 вопроса здесь

  • Являются ли действия asp.net mvc однопользовательскими? что означает, что если одно действие вызывается несколькими пользователями, будет ли это конкретное действие выполняться по одному для каждого пользователя, а не в отдельном (магическом) потоке, созданном asp.net или IIS?

  • Каким должен быть мой подход, чтобы сделать его параллельным, так как ping - это сетевая операция.

Я работаю на asp.net, но этот аспект мне кажется новым. Любые ресурсы, специфичные в этом контексте, приветствуются.

Редактировать: я работаю над Asp.Net MVC 2

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Это произойдет, если вы используете сеансы в своих действиях. Поскольку сессии не являются поточно-ориентированными, ASP.NET сериализует доступ к ним. Поэтому, если у вас есть 2 параллельных запроса на одно и то же действие из одного и того же сеанса (как в случае с запросами AJAX), и если это действие выполняет запись в сеанс ASP.NET, эти 2 запроса будут поставлены в очередь и будут выполняться последовательно.

Если вы отключите сеанс в своем файле web.config (<sessionState mode="Off" />) или отключите его для данного контроллера, запросы больше не будут обрабатываться последовательно, а параллельно. Конечно, это означает, что этот контроллер не должен использовать сеанс вообще или использовать его только для чтения. См. Атрибут [SessionState]:

[SessionState(SessionStateBehavior.ReadOnly)]
public class HomeController: Controller
{
    // actions in this controller can be processed in parallel
    // for requests from the same session
}
0 голосов
/ 17 января 2012

нет, это не однопользовательский. asp.net webform / mvc создаст новый поток для обработки нового запроса. два разных запроса одновременно будут иметь два потока.

log4net буферизует любые запросы журнала и очищает все за один раз. вы просто не можете написать два предложения в одной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...