Сессия и темы - PullRequest
       9

Сессия и темы

6 голосов
/ 23 июля 2010

Не удалось найти однозначного ответа на этот вопрос, когда сеанс клиента установлен для приложения ASP.NET MVC2. Я предполагаю, что определенный поток из пула потоков обрабатывает этот запрос.Всегда ли один и тот же поток обрабатывает все последующие запросы для этого сеанса?Таким образом, теоретически, если каким-то образом идентификатор сессии был испорчен и выбран неверный поток, тогда какие-либо данные уровня сеанса отсутствовали бы?Спасибо

Ответы [ 2 ]

3 голосов
/ 23 июля 2010

Короче говоря, нет, не под IIS (я не могу поручиться за сервер веб-разработки "Cassini" в Visual Studio, но я тоже сомневаюсь там)

Вы можете продемонстрировать изменение потока, добавив к представлению следующее:

<%= System.Threading.Thread.CurrentThread.ManagedThreadId %>

Теперь повторно нажимайте на страницу из вашего браузера (или, возможно, просматривайте ее в 2 или 3 браузерах), и вы будете время от времени видеть, как она меняется.

Сказав это, - в простом сценарии, подобном этому, вы можете часто видеть тот же поток, обслуживающий запрос, поскольку ASP.NET не стоит создавать больше потоков, чем нужно, но после запуска загружая сервер, вы увидите несколько потоков.

2 голосов
/ 23 июля 2010

Нет.Каждый запрос может быть обработан другим потоком.Это означает, что различные ресурсы на странице могут обрабатываться разными потоками.Или они могут быть обработаны на одном и том же.Это рабочий процесс, и я должен разобраться, стоит ли создавать новый поток или лучше подождать, пока он станет доступным.

Страница будет отображаться одним потоком, а затем изображения, таблицы стилейи javascripts могут быть обработаны в том же или других потоках.Это имеет основополагающее значение для природы ASP.NET и веб-программирования в целом.Однако он позволяет вам балансировать все ваши запросы на разных серверах или даже в разных доменах.

Это приводит нас к вашему вопросу о состоянии сеанса.Вы не должны терять идентификаторы сессии между запросами.Если да, то что-то серьезное не так.Или вы можете оказаться в ситуации веб-фермы / кластера, когда один запрос направляется на один сервер, а следующий перенаправляется на другой с помощью какого-либо распределения нагрузки.сохраняющегося состояния сеанса.Два наиболее распространенных подхода - это сохранение в базе данных и в распределенном кэше.Последнее - мой предпочтительный подход, потому что данные сеанса по своей природе являются временными и не относятся к постоянной базе данных.

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