2014-11-18 1 views
2

У меня есть приложение, которое я запускаю в Visual Studio 2013 под сервером IIS Express. Проблема заключается в том, что данные сеанса не хранятся между страницами, и я нахожу нулевые объекты, которые раньше не были пустыми. Если я скомпилирую приложение и разворачиваю его на веб-сервере с IIS, он работает нормально, поэтому это должно быть что-то с IIS Express. Я искал файлы конфигурации в папках документов, но на самом деле не знаю, что это такое.IIS Express не сохраняет данные сеанса

Спасибо, Люк

Edit 25/11: Я отладки кода на одной и той же машины WITN VS 2013 и VS 2010, и я нашел, где код ведет себя по-разному. После того, как код был выполнен и страница была построена, в VS 2010 выполнение завершается. В VS 2013 после того, как страница была построена, я получаю еще один вызов метода context_BeginRequest (отправитель объекта, EventArgs e), который перенаправляет приложение на стартовую страницу, где команда Session.Clear() очищает сеанс. Теперь проблема заключается в следующем: почему существует дополнительный вызов метода context_BeginRequest? Почему он перенаправляется на стартовую страницу, а не на страницу, в которой он сейчас находится? Спасибо, Люк.

+0

У меня была очень похожая проблема несколько недель назад, до сих пор не удалось ее решить. –

+0

Я нашел решение http: // stackoverflow.com/questions/27149387/ihttpmodule-behaves-differently-on-different-servers – Luke

ответ

0

Это правильное поведение, чтобы понять это, вам нужно понять работу рабочего процесса IIS, в которой размещается приложение. Каждый раз, когда он перерабатывает рабочий процесс, все данные будут потеряны, как перезагрузка рабочего процесса. Ниже приведены варианты:

  • поддерживать данные, которые вам нужны в стороне сервера структуры, таких как сессии (которая в реализации пользователя) или Cache (Application широкоэкранные), которые являются словарными структурами типа (ключ пара Value), так каждый раз, когда вы возвращаетесь, используйте ключ для возврата данных.

  • запомнить Кэш - идеальное решение, которое может охватывать все машины.

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

Поймите больше о Cache и Session

Пожалуйста, дайте мне знать, если вам необходимо дать разъяснение в отношении моего ответа

+0

Я не понимаю, что я должен делать. Почему сеанс поддерживается на сервере с помощью IIS? – Luke

+0

Храните данные в кеше (Application wide), используя пару ключевых значений (ваши данные), они не поддерживаются в IIS WP. В каждом вызове извлекают данные из кеша и используют его, а затем сохраняют ваши данные по запросам. Что-то вроде: Cache.Insert («Key1», data); (Store) Данные d = (данные) Кэш ["Key1"] –

+1

Я сделал еще один тест, и приложение работает правильно в Visual Studio 2010. Я не думаю, что решение заключается в том, чтобы манипулировать кодом для компенсации IIS Express. – Luke

3

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

Когда я установил состояние сеанса в cookieless, <sessionState cookieless="true", переменная сеанса будет сохранена. Это было нежелательно, потому что оно добавляет имя сеанса в URL.

На следующем обзоре я заметил строку в моей системе.web <httpCookies requireSSL="true" /> Когда я прокомментировал это, все сработало как обычно.

Проблема заключалась в том, что на моем сервере IIS на производстве был размещен код с использованием https: //, в то время как мой тестовый сервер IIS Express использовал только http. Поэтому мои незащищенные куки были отброшены.