Проблема здесь в том, что ваше приложение выполняет динамическую компиляцию, что означает, что любые изменения в файлах разметки вызовут перезапуск приложения. Любой перезапуск приложения, как вы знаете, сбросит сессию InProc.
«Веб-приложение» в вашем локальном шаблоне настроено иначе, поэтому оно не перезапускает все приложение. Однако у предварительной компиляции есть свои преимущества.
Есть несколько способов обойти это.
Почему это происходит
ASP.NET 4.5 по умолчанию позволяет запускать «веб-страницы» бок о бок с «веб-приложениями». Вероятно, это является причиной того, что изменения в aspx запускают предварительную компиляцию (что «веб-страницы» должны делать каждый раз, когда происходит изменение). Дополнительная информация здесь: http://msdn.microsoft.com/en-us/library/dd547590.aspx
В новой версии также немало изменений для оптимизации веб-сервера. Вы можете увидеть подробную информацию об этих изменениях здесь, а также они могут объяснить изменение при обновлении. http://www.asp.net/vnext/overview/aspnet/whats-new
Решение остается тем же, независимо от того, обновлять отдельные файлы aspx на лету не рекомендуется. Если это неизбежно, перезагрузка в конечном итоге произойдет при любой настройке, поэтому в любом случае стоит использовать одно из следующих решений.
Решения
Режим компиляции
Проверьте CompilationMode в своем web.config. Для получения дополнительной информации ознакомьтесь с этим сообщением http://www.campusmvp.net/compilationmode-avoiding-aspx-page-compilation-to-improve-scalability-in-sites-with-thousands-of-pages/
Это также можно установить на уровне сервера, чтобы вы могли получить различия в зависимости от среды.
Режим состояния сеанса
Вы можете запустить состояние сеанса в режиме StateServer или с помощью сервера Sql. Сервер состояния ASP.NET будет находиться на вашем сервере, если .net установлен, и его просто нужно настроить на автоматический запуск. Затем вы можете просто переключить его в config.
<sessionState mode="StateServer" useHostingIdentity="true" cookieless="false" timeout="120" stateConnectionString="tcpip=127.0.0.1:42424" />
Мы всегда используем сервер состояний ASP.NET для разработки и во многих случаях в производстве. Я считаю, что при тестировании длинных пользовательских путей (например, мастера форм со многими формами) очень раздражает, что сеанс сбрасывается каждый раз, когда вы перестраиваете. Это также будет означать, что вы не теряете сеанс при перезапуске приложения.
Таким же образом можно использовать SQL-сервер.
ПРИМЕЧАНИЕ. Вы должны помнить, что если вы сериализуете классы в состояние сеанса и вносите изменения, вам нужно будет вручную перезапустить сервер состояний, иначе вы получите ошибки сериализации. Это очень редко, но нужно знать об этом в производственной среде.
person
Gats
schedule
05.11.2012