Состояние сеанса ASP.NET и несколько рабочих процессов

Мне нужно кое-что понять о состоянии сеанса ASP.NET, поскольку это применимо к IIS 7 и ASP.net 3.5.

Если приложение настроено на использование внутрипроцессного состояния сеанса, будет ли это работать нормально, если есть несколько рабочих процессов? Другими словами, разделяют ли рабочие процессы состояние сеанса?

Конфигурация по умолчанию для IIS 7 - использовать внутрипроцессное состояние сеанса и выделить максимум 10 рабочих процессов. Тогда может показаться вероятным, что эта конфигурация по умолчанию должна работать. Я имею дело с компанией, которая выпустила веб-приложение ASP.NET MVC, у которого есть некоторые проблемы, они винят серверную среду. Утверждается, что поскольку я использую настройки по умолчанию для 10 рабочих процессов, это нарушает их состояние сеанса. Мне нужно знать, действительно ли это утверждение верно. Я никогда не слышал, чтобы приложение ASP.NET не работало с конфигурацией по умолчанию, поэтому я немного запутался, и мне нужно прояснить это.


person Tim Long    schedule 27.01.2010    source источник
comment
Какие проблемы испытывает приложение? На первый взгляд это больше похоже на проблему повторного использования рабочего процесса.   -  person Nick Craver    schedule 27.01.2010
comment
Сеанс inproc не распределяется между рабочими процессами. Просто установите их пул приложений на использование только одного, и проблемы исчезнут.   -  person NotMe    schedule 28.01.2010


Ответы (4)


Наличие нескольких рабочих процессов и использование InProc кажется несовместимым.

См. это:

Если вы включили режим веб-сада, установив для атрибута webGarden значение true в элементе processModel файла Web.config приложения, не используйте режим состояния сеанса InProc. В противном случае может произойти потеря данных, если разные запросы для одного и того же сеанса обслуживаются разными рабочими процессами.

person Michael Krauklis    schedule 27.01.2010
comment
да. Он несовместим между несколькими рабочими процессами и состоянием сеанса InProcess. - person Robin Sun; 26.09.2018

Более чем один рабочий процесс представляет собой «веб-сад». Состояние сеанса в процессе не будет работать правильно. Вам нужно будет использовать либо один рабочий процесс для вашего веб-приложения, либо использовать сервер состояния сеанса, либо SQL Server для состояния сеанса.

person TheObjectGuy    schedule 27.01.2010

Возможно, я ошибаюсь, но, насколько мне известно, по умолчанию у вас есть только 1 рабочий процесс на домен приложения с несколькими рабочими потоками для обработки запросов. В этом случае In-Proc Session State должен работать нормально (настройки по умолчанию).

Но если у вас есть несколько рабочих процессов (а не только рабочие потоки, фактические рабочие процессы), вам действительно нужно состояние сеанса вне процесса.

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

person Community    schedule 27.01.2010

Я столкнулся с проблемой потери сеанса и, наконец, изо всех сил пытался найти первопричину.

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

Основная причина находится между настройкой рабочего процесса и состоянием сеанса. Здесь у нас есть 5 рабочих процессов, что означает, что при высокой загрузке веб-сайта у него будет 5 независимых процессов. Пока сеанс хранится в процессе, IIS не может гарантировать, что пользователь-клиент будет использовать тот же рабочий процесс. Например, пользовательский клиент использует процесс A при первом посещении сети, а при втором посещении сети он может использовать процесс B. В процессе B не хранится сеанс, поэтому его сеанс теряется.

Почему это нормально при низкой загрузке сайта? Потому что IIS настроит только один рабочий процесс при низкой нагрузке. Таким образом, проблема с потерей сеанса не возникнет. Это объясняет, почему это нормально, когда я развертываю новую версию и тестирую ее нормально ночью, но ошибка повторяется завтра утром. Потому что ночью загрузка сайта низкая.

Будьте осторожны при использовании состояния сеанса в Process, оно нестабильно, когда ваш веб-сайт будет загружен с высокой загрузкой и при наличии нескольких рабочих процессов. Попробуйте что-нибудь вроде State Serversession state.

person Robin Sun    schedule 26.09.2018