Запуск ASP.Net Inproc после изменения разметки в VS2012 - программирование
Подтвердить что ты не робот

Запуск ASP.Net Inproc после изменения разметки в VS2012

Я обновил свою машину разработки до Windows 8 и Visual Studio 2012.

Я тестирую свои приложения ASP.Net(также обновленные до .net 4.5) в локальном IIS.

Одна вещь, которая раздражает меня, которая не была таким образом с моей последней конфигурацией (Windows 7, VS 2010,.net 4.0), заключается в том, что сеансы InProc перезапускаются после изменений в файлах разметки.

Пример: я зарегистрировался в своем локальном приложении ASP.net, создаю и сохраняю изменения в файле *.ascx, обновляю свой веб-браузер, и сеанс исчез.

Как отключить перезагрузку сеанса?

Edit: Я попытался воспроизвести проблему с новым шаблоном проекта VS 2012 Web Application, удалил ненужный контент и не смог воспроизвести эту проблему.

Однако в моем реальном проекте проблема все еще остается: Изменения в файле aspx или ascx приводят к запуску события Application_Start.

Я также разделил web.config в своем реальном проекте до минимума, чтобы он выглядел как тот, что был в новом проекте, но это также не позволило мне удалить ошибку. Вещи, которые я прокомментировал в web.config, - это элементы управления DevExpress, настраиваемые параметры HealthMonitoring, IIS UrlRewrite 2

Applicationpool as Integrated, v4.0 с NetworkService как Identity

4b9b3361

Ответ 1

Я не собираюсь брать кредит на это, но ответ похоронен в 11-м комментарии к исходному вопросу @Anand:

Добавьте этот ключ в web.config:

<appSettings><add key="PageInspector:ServerCodeMappingSupport" value="Disabled" /></appSettings>

и проблема уходит. VS становится намного более отзывчивым. Единственным недостатком является то, что вы теряете обход на стороне сервера от Page Inspector.

Надеюсь, MS скоро представит исправление.

Ответ 2

Проблема заключается в том, что ваше приложение выполняет динамический компилятор, что означает, что любые изменения в файлах разметки заставят приложение перезагрузиться. Любой перезапуск приложения, как вы знаете, сбрасывает сеанс 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 установлен, и его нужно просто настроить для автоматического запуска. Затем вы можете просто включить его в конфигурацию.

<sessionState mode="StateServer" useHostingIdentity="true" cookieless="false" timeout="120" stateConnectionString="tcpip=127.0.0.1:42424" />

Мы всегда запускаем с использованием государственного сервера ASP.NET для разработки и во многих случаях на производстве. Я нахожу при тестировании длинных пользовательских маршрутов (например, мастера форм со многими формами), очень раздражает, когда сессия повторяется каждый раз, когда вы перестраиваете. Это также означает, что вы не потеряете сеанс при перезагрузке приложений.

Вы также можете использовать SQL-сервер таким же образом.

ПРИМЕЧАНИЕ. Вы должны помнить, что если вы сериализуете классы в состояние сеанса и вы вносите изменения, вам нужно будет вручную перезапустить государственный сервер или вы получите ошибки в сериализации. Это очень редко, но только для того, чтобы быть в рабочем состоянии.

Ответ 3

при использовании режима в-proc ваши данные сеанса размещаются на сервере. Вы должны проверить на своем IIS время повторного использования пула приложений.

Приветствия,

Ответ 4

вы можете попробовать режим состояния сеанса SQL Server.

Ответ 5

Одна из возможных проблем: IIS (а также ASP.NET Development Server) перезапускает приложение после того, как вы выберете файл из TFS.

Я нашел решение здесь: http://forums.iis.net/p/1200785/2055480.aspx/1?IIS+Express+restarts+site+when+a+file+is+checked+out

  • Перейдите к:% USERPROFILE%\AppData\Роуминг\Microsoft\VisualStudio\11.0
  • Удалить файл app_offline.htm.
  • Создайте папку с именем app_offline.htm