Наш веб-сайт использует наше собственное управление состоянием сеанса отдельно от состояния сеанса ASP.NET. Но поскольку несколько специальных страниц используют службы отчетов SQL Server, нам также необходимо включить состояние сеанса ASP.NET. Поскольку мы находимся в среде с балансировкой нагрузки, мы включили ASP.NET State Server (aspnet_state.exe или «Режим вне процесса») на отдельном бэкэнд-компьютере.
Сегодня я заметил, что когда мы временно отключили машину, на которой запущена служба состояний в нашей среде Dev, веб-сайт Dev перестал работать («Невозможно отправить запрос состояния сеанса на сервер состояния сеанса».) Это несмотря на наличие EnableSessionState = «Ложь» на загружаемой странице.
Зачем ASP.NET необходимо подключаться к службе состояний при обработке запроса на страницу, которая не использует состояние сеанса? Похоже, это происходит, даже если страница не использует мастер-страницу, базовую страницу или какие-либо пользовательские элементы управления. Я проверил весь наш программный код, чтобы убедиться, что мы никогда не будем программно повторно включать состояние сеанса или пытаться получить к нему доступ.
--- РЕДАКТИРОВАТЬ ПОСЛЕ БОЛЬШЕ НЕИСПРАВНОСТЕЙ ---
Как предложено пользователем ниже, я попытался создать веб-сайт с нуля, чтобы протестировать его без каких-либо осложнений со стороны httpHandlers, httpModules или другой пользовательской логики.
- Я использовал Visual Studio 2008 для создания нового «Веб-сайта ASP.NET» с использованием VB.NET .
- Я запустил сайт через VS, что позволило ему включить режим отладки и создать стандартный файл web.config.
- Я добавил
<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" />
в элемент <system.web>
и запустил локальную службу состояний ASP.NET ".
- Я изменил EnableSessionState страницы Default.aspx на False и перезагрузил страницу = OK.
- Я остановил службу состояний ASP.NET и перезагрузил страницу = "Невозможно сделать запрос состояния сеанса на сервер состояния сеанса."
В этот момент я был озадачен, потому что другие пользователи утверждали, что они пробовали что-то подобное и не испытывали такой же проблемы. Поэтому мне стало интересно, имеет ли это какое-либо отношение к использованию VB.NET (хотя это звучит глупо). Все больше людей используют C # для ASP.NET, поэтому Я переделал свой тест выше с веб-сайта C #, и вот, нет исключений при доступе к странице! Я получил исключение, только если я установил EnableSessionState в True и фактически получил доступ к коллекции сеансов в коде.
Это доказывает, что сайты VB.NET в ASP.NET ведут себя немного по-другому, так как они обращаются к состоянию сеанса на каждой странице, даже если страница не нужна. К сожалению, это не отвечает на мой первоначальный вопрос: Почему?
Я собираюсь сделать кросс-пост на официальных форумах ASP.NET и посмотреть, смогут ли какие-нибудь гуру там пролить свет.