Сеанс 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, обновляю свой веб-браузер, и сеанс прекращается.

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

Изменить: я попытался воспроизвести проблему с помощью нового шаблона проекта веб-приложения VS 2012, удалил ненужное содержимое и не смог воспроизвести эту проблему.

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

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

Пул приложений как интегрированный, v4.0 с NetworkService как удостоверение


person citronas    schedule 27.10.2012    source источник
comment
@ m.qayyum: Что ты хочешь сказать мне этими ссылками?   -  person citronas    schedule 30.10.2012
comment
Не могли бы вы предоставить небольшой код, который может воспроизвести эту проблему, и отправить его по электронной почте netfx45compat (at) Microsoft (dot) com?   -  person Anand    schedule 30.10.2012
comment
Не могли бы вы проверить, является ли это той же проблемой, что и ошибка подключения? connect.microsoft.com/VisualStudio/feedback/details/766223/   -  person Anand    schedule 30.10.2012
comment
@ Ананд, это неработающая ссылка.   -  person Ray Cheng    schedule 30.10.2012
comment
это не неработающая ссылка, вам нужно подписаться на обратную связь VS, и тогда содержимое будет выпадать. проверьте social.msdn. microsoft.com/Forums/en-US/csharpide/thread/   -  person Anand    schedule 31.10.2012
comment
@Anand: Я пытался воспроизвести, но потерпел неудачу. Я отредактировал свой вопрос, посмотрите, пожалуйста. Я думаю, что моя проблема связана с той, которую вы связали, но не с той. Я никогда не сталкивался с тем, что событие Application_Start запускалось несколько раз для одного и того же запроса.   -  person citronas    schedule 03.11.2012
comment
Я понимаю. Итак, удаление любого из этих элементов управления DevExpress, пользовательского мониторинга здоровья, IIS UrlRewrite 2 устраняет проблему? Можете ли вы указать, какой из них вызывает проблему, прокомментировав / раскомментировав один из этих элементов управления? это поможет нам изолировать проблему и, возможно, выяснить первопричину.   -  person Anand    schedule 06.11.2012
comment
@Anand: Нет, удаление любого из элементов управления DevExpress, настраиваемого HealthMonitoring, IIS UrlRewrite 2 не повлияло на поведение.   -  person citronas    schedule 06.11.2012
comment
@Anand: Что-нибудь новенькое по этому поводу?   -  person citronas    schedule 03.12.2012
comment
@citronas: можете ли вы добавить этот параметр приложения в файл web.config и попробовать этот сценарий и посмотреть, будут ли проблемы с повторениями? ‹AppSettings› ‹добавить ключ = PageInspector: ServerCodeMappingSupport value = Disabled› ‹/add› ‹/appSettings›   -  person Anand    schedule 04.12.2012
comment
@Anand: Да, спасибо, использование этого параметра решает мою проблему   -  person citronas    schedule 06.12.2012
comment
@citronas: Большое спасибо за подтверждение и добавление этого обходного пути в качестве ответа. Потребовалось время, чтобы найти основную причину такого поведения. Цените вашу помощь в этом.   -  person Anand    schedule 07.12.2012


Ответы (5)


Я не собираюсь брать на себя ответственность за это, но ответ скрыт в 11-м комментарии к исходному вопросу @ Ананд < / а>:

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

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

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

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

person SGS    schedule 06.12.2012
comment
Добавление этого ключа фактически решает проблему. Я также надеюсь, что MS скоро исправит этот обходной путь и что другие разработчики с той же проблемой могут извлечь выгоду из ответа Ананда. - person citronas; 06.12.2012
comment
Мне любопытно, вы сталкивались с той же проблемой? - person citronas; 06.12.2012
comment
Да, пару недель выдергивала волосы! Хуже всего то, что VS2010 тоже портится на той же машине, я думаю, из-за хуков, которые устанавливаются в IIS. - person SGS; 06.12.2012
comment
да. Мы активно работаем над этой проблемой, чтобы исправить ее должным образом. Исправление будет доступно в будущем обновлении VS 2012. - person Anand; 07.12.2012
comment
@Anand Что-нибудь еще, что может вызвать эту проблему? Я испытываю то же самое в vs2013 в проекте, преобразованном из vs2010. Вдобавок проект, вероятно, перешел с .NET 1.1 на .NET 3.5. Я попробовал настройки приложения, указанные выше, но это не помогло моей ситуации. Странно то, что это случается только в некоторых проектах. У меня есть несколько проектов, которые прошли один и тот же путь миграции, поэтому я могу вносить изменения в разметку нормально. - person Terry; 02.04.2015
comment
@Terry, Инспектор страниц не должен мешать работе с проектами .net 3.5. вот предварительные требования инспектора страниц ссылка . Можете ли вы проверить свой файл web.config и увидеть целевую структуру? мы исправили эту проблему в последних обновлениях vs2013. В конвейере могут быть другие компоненты, вызывающие перезапуск сеанса. - person Anand; 08.04.2015
comment
@Anand Что я ищу в web.config? Я не могу найти «цель» или «фреймворк». В свойствах веб-сайта указано Target framework: 3.5. Я проверил другой проект, который (насколько мне известно) прошел через тот же поток (преобразование) ... и я могу изменить разметку, не прерывая сеанс. Заранее спасибо. - person Terry; 09.04.2015
comment
@Terry, проблема, о которой вы говорите, не имеет отношения к Page Inspector. - person Anand; 27.05.2015

Проблема здесь в том, что ваше приложение выполняет динамическую компиляцию, что означает, что любые изменения в файлах разметки вызовут перезапуск приложения. Любой перезапуск приложения, как вы знаете, сбросит сессию 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
comment
Спасибо, что указали на проблему с режимом компиляции. Очевидно, никогда не работает. Я попробовал Auto, что позволило мне выполнить 2-3 запроса после изменения, но затем приложение завершилось без ошибок (Server.GetLastError () имеет значение null), а Application_Error не срабатывает. Установка CompilationMode от значения по умолчанию (которое не изменилось между 4.0 и 4.5) не приносит мне никакой пользы. К сожалению, я действительно хотел бы знать, что вызвало критическое изменение в процессе обновления. - person citronas; 05.11.2012
comment
Посмотрите, почему это происходит. Я уверен на 90%, поэтому при обновлении до 4.5 происходит изменение поведения. Раньше это было одно или другое между веб-страницами и веб-приложениями. - person Gats; 05.11.2012

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

Ваше здоровье,

person Daniel    schedule 30.10.2012
comment
Спасибо за ваши усилия, но проблема не во времени перезапуска пула приложений. - person citronas; 30.10.2012

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

person Hiren Dhaduk    schedule 04.11.2012
comment
А что изменилось в процессе обновления? - person citronas; 05.11.2012
comment
вам нужно запустить службу Windows сервера состояний на сервере, а также выполнить некоторые команды для установки базы данных, которая хранит сеанс на сервере sql. для получения дополнительной информации посетите codeproject.com/Articles/ 104082 / в этом режиме состояния сеанса ваш сеанс никогда не истечет. - person Hiren Dhaduk; 06.11.2012

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

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

  1. Перейдите к: % USERPROFILE% \ AppData \ Roaming \ Microsoft \ VisualStudio \ 11.0
  2. Удалите файл app_offline.htm.
  3. Создайте папку с именем app_offline.htm
person Monsignor    schedule 02.09.2013