Состояние сеанса и пул приложений - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть веб-сервер, и моя команда установила для пула приложений для веб-приложения значение 3 для обеспечения устойчивости и производительности. Однако мы столкнулись с проблемой, когда часть приложения работает не полностью.

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

Однако я не уверен в этом или в том, должен ли я использовать SessionState в web.config. Если я прав, должен ли режим быть InProc, SessionState или как? Должен ли быть тайм-аут в сеансе?

Может кто-нибудь, пожалуйста, посоветуйте мне?

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

Нельзя использовать InProc в многопоточном режиме (3 потока в пуле приложений), не гарантируя, что каждый запрос направляется в один и тот же поток.

InProc буквально означает в процессе, как в памяти текущего потока.

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

Предлагаю прочитать это

0 голосов
/ 16 февраля 2011

Итак, вы разбили свое приложение на три части на одном сервере, каждая из которых работает в своем собственном пуле приложений в IIS? Я бы оспорил предположения, стоящие за этим, но на самом деле это не ваш вопрос.

Я не думаю, что вы можете сделать это и поделиться состоянием сеанса, используя готовые инструменты. Он использует путь сайта (метабазы) как часть «ключа» состояния сеанса, поэтому сеансы с разных сайтов не конфликтуют.

Но если бы вы могли это сделать, вам нужно было бы использовать один из режимов sessionState вне процесса (StateServer или SQLServer).

Я не пробовал следующее, но они могут вам помочь.

Вот ссылка на статью Code Project , в которой описывается изменение сеанса SQL Server для группирования сайтов и совместного использования сеансов.

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

EDIT:

Ах, веб-сад. Да, ваши рабочие процессы не разделяют данные сеанса InProc. Вам нужно использовать внешнего поставщика. StateServer работает нормально. Вам нужно будет включить службу состояний ASP.NET на сервере и обновить свой web.config, чтобы использовать его. Есть несколько вещей, которые следует учитывать при этом:

  • Работает ли он на другом сервере? чем IIS? Нужно включить удаленный соединения.
  • У вас есть несколько веб серверы? Нужно определить машину ключ.
  • Вы храните объекты в сессия? Нужно пометить их сериализации.

Есть много ресурсов онлайн, чтобы помочь с этим, вот пример сообщение в блоге .

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