SessionStateTempDataProvider требует, чтобы SessionState был включен - PullRequest
6 голосов
/ 06 апреля 2009

Мой гибридный проект (веб-формы / MVC) работает нормально в моей локальной среде разработки, НО при развертывании (xcopy) в моей тестовой среде я получаю сообщение об ошибке, что требуется SessionState (полная ошибка показана ниже).

Что странного в этом сообщении об ошибке, так это то, что состояние сеанса установлено как InProc в моей конфигурации web.config, и IIS7 также показывает это.

У меня классический сайт веб-форм, и у меня есть только один небольшой раздел, который я перехожу на MVC 1.0. И теперь моя обычная веб-форма default.aspx не может появиться!

  • Я не вообще использую провайдера TempData в MVC, поэтому я предполагаю, что фреймворк по какой-то причине работает, но, черт возьми, мой SesionState включен ...
  • Моя тестовая среда работает на IIS 7 в интегрированном режиме с моим webconfig с помощью sessionstate как InProc и работает нормально.

Подробнее: Ради интереса я создал заглушку, предназначенную только для MVC, и развернул ее в тестовой среде, и она отлично работала! web.config по сути одинаковы, и один работает, а другой нет.

Любая помощь приветствуется.


Сообщение об ошибке

Ошибка сервера в приложении '/'.

SessionStateTempDataProvider требует, чтобы SessionState был включен. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде. Сведения об исключении: System.InvalidOperationException: SessionStateTempDataProvider требует, чтобы SessionState был включен. Ошибка источника: Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[InvalidOperationException: SessionStateTempDataProvider требует, чтобы SessionState был включен.] System.Web.Mvc.SessionStateTempDataProvider.LoadTempData (ControllerContext controllerContext) +247928 System.Web.Mvc.TempDataDictionary.Load (ControllerContext controllerContext, ITempDataProvider tempDataProvider) +30 System.Web.Mvc.Controller.ExecuteCore () +71 System.Web.Mvc.MvcHandler.ProcessRequest (HttpContextBase httpContext) +209 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +599 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершено синхронно) + 171

Ответы [ 6 ]

12 голосов
/ 06 апреля 2009

Google Solved: Я добавил этот атрибут в узел модулей в web.config, и ВСЁ волшебным образом начало работать:

<modules runAllManagedModulesForAllRequests="true">

Похоже, я не одинок:

http://forums.asp.net/p/1293974/2509190.aspx

http://www.flyvergrillen.dk/2009/03/26/being-trapped-in-iis/

Я думаю, что мой чистый проект MVC (который работал в тестовой среде) был слишком простым и, возможно, не заставил инфраструктуру MVC требовать TempData и SessionState, так что я объясню это; -)

5 голосов
/ 19 декабря 2009

У меня была такая же проблема, и, конечно, я получал ту же ошибку. Несмотря на то, что мне не требовалось состояние Session для моего MVC-приложения, я просто был заинтересован в том, чтобы запустить и запустить приложение, поэтому хотел включить состояние сеанса ... почему бы и нет !!

Даже после добавления настройки состояния сеанса в мой файл web.config,

<system.web>...<sessionState mode="InProc" />...</system.web>

Я продолжал получать то же сообщение об ошибке .... очень сбивает с толку!.

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

4 голосов
/ 09 декабря 2010

Добавьте следующее к <system.webServer> <modules>:

<add name="SessionStateModule" type="System.Web.SessionState.SessionStateModule" />
0 голосов
/ 05 ноября 2013

Убедитесь, что служба состояния ASP.NET (aspnet_state.exe) работает, если вы настроили SessionState для использования StateServer:

<sessionState mode="StateServer" ... />

Это была моя причина этой ошибки.

0 голосов
/ 30 сентября 2010

Если вы используете SQLServer в качестве режима sessionState, например

<sessionState mode="SQLServer" sqlConnectionString="data source=server;integrated security=true" cookieless="false" />

убедитесь, что строка подключения верна и у вас есть права доступа к базе данных. Я понимаю, что этот вопрос был для режима InProc, но я столкнулся с той же ошибкой, когда я забыл предоставить привилегии учетной записи, под которой работало мое приложение, и этот вопрос был самым популярным в моем поиске Google.

0 голосов
/ 05 июля 2010

Добавьте следующую запись в system.webServer/handlers

<add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc"/>

Измените path="*.mvc" на любое используемое вами расширение / путь.

Использование runAllManagedModulesForAllRequests="true" не очень хорошее решение, потому что все модули будут работать для каждого запроса, включая статические файлы, которые могут ухудшить производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...