2014-12-18 2 views
2

У меня в настоящее время странная проблема с сеансами, я работал с MVC довольно долго и никогда не имел этого в предыдущих версиях. В настоящее время создание новой системы с использованием MVC5 в первый раз, все хорошо. Сеансы устанавливаются без проблем, однако, если я изменю файл cshtml в VS, мой сеанс будет убит.Потеря сеанса после изменения файла/загружена

Также у меня есть функция загрузки файлов, которая работает, но когда вы загружаете файл, а затем переходите на другую страницу, сеанс снова исчезает. Это работает локально, а также в окне Windows Server, которое мы используем для песочницы.

Что-то изменилось с новыми версиями MVC относительно сеансов? Раньше у меня этого никогда не было. У меня есть набор для использования в сеансах proc, которые обычно не нужны для изменения чего-либо, но я имею в виду вещи, используемые cookieless, используемые файлы cookie и т. Д. В качестве параметров. Ничто не работает.

Если у кого-то есть идея, что было бы здорово.

+2

Что касается модификации файлов 'cshtml', то IIS необходимо перекомпилировать представление, и неудивительно, что в этот момент сеанс убит, поскольку (возможно) пул приложений сбрасывается. Какие файлы вы загружаете и куда они идут? У меня много проектов на последнем MVC и нет проблем с загрузкой файлов. – trailmax

+0

Я думаю, что это действительно две проблемы. Это файлы PDF, и они попадают в папку внутри папки «content». Кажется, каждый раз, когда файл изменяется/добавляется/удаляется/etc, он выполняет новый компилятор. Хотя это никогда не делалось в MVC 4, и мой код почти точно такой же. С каких пор MVC компилирует Views? – Diginari

+0

MVC всегда скомпилировал представления - при первом попадании страницы он компилирует представления и кэширует двоичный файл. Вы можете развернуть с предварительно скомпилированными представлениями, и вы не получите «штраф первого удара». Реальный вопрос: «Когда MVC начал проигрывать сеанс в компиляции вида?» Я предполагаю, что это зависит от конфигурации сеанса - если вы настроите данные сеанса, которые будут сохраняться за пределами IIS, ваш сеанс не будет убит при утилизации приложений. – trailmax

ответ

6

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

Решение состоит в том, чтобы переключиться на другие, постоянные хранилища сеансов, возможно, проще всего настроить sql. Вам просто нужен сервер SQL, где вы запускаете скрипт, который создает базу данных сеанса:

http://support.microsoft.com/kb/317604

Другим вариантом будет использовать Государственный сервер:

http://msdn.microsoft.com/en-us/library/ms178586.aspx

Производительность государства Сервер обычно лучше, чем сервер SQl, поскольку данные не сохраняются на диске. Однако, поскольку государственный сервер является отдельным процессом, ваш сервер приложений не будет потерять сеансы, даже когда пул приложений перезагрузится.

Смежные вопросы